text:
35mm Misc
27 images, shot on 01/01/2000
SCROLL DOWN past Thumbnails to browse all photos larger size - or Click/Tap Here to browse; new photos appear at the bottom as you scroll down.
Thumbnails for 35mm Misc 27 images, shot on 01/01/2000
+ Show remaining -73 Tuhumbnails
Groups of Related Photos
Astoria-Megler Bridge Collection, 13 images
Oregon Coast Collection, 120 images
Light Streaks Collection, 42 images
Cannon Beach Collection, 70 images
Portland Street Scenes Collection, 75 images
Fremont Bridge Collection, 38 images
Mt. Saint Helens Collection, 52 images
Mt. Hood Collection, 74 images
Portland Cityscape Collection, 64 images
Reflections Collection, 39 images
Portland Buildings Collection, 69 images
Portland Statues, Signs, and Plaques Collection, 109 images
Hawthorne Bridge Collection, 47 images
Best Portland Pictures Collection, 70 images
Ross Island Bridge Collection, 29 images
Portland Riverfront Collection, 63 images
Tom McCall Waterfront Park Collection, 93 images
Sellwood Bridge Collection, 27 images
St. Johns Bridge Collection, 50 images
Fog Collection, 29 images
Best Bridge Pictures Collection, 39 images
Yaquina Bay Bridge Collection, 40 images
Newport, Oregon Collection, 53 images
Groups of Recent Shoots
New Sellwood Bridge (18 images) - shot on 12/03/2016
Portland Tilikum Crossing Bridge, City Buildings, Dusk (16 images) - shot on 11/26/2015
Portland Tilikum Crossing Fireworks (25 images) - shot on 08/22/2015
Portland Bridge Pedal 2015 from Marquam Bridge (53 images) - shot on 08/09/2015
Portland Waterfront Daybreak and Dusk Pictures (28 images) - shot on 01/01/2015
Portland's Tilikum Crossing Bridge at Night (11 images) - shot on 12/06/2014
Tilikum Crossing, Portland's New Transit Bridge (15 images) - shot on 11/08/2014
Portland Parks, Fall Leaves (35 images) - shot on 10/25/2014
Neighborhood Info
External Links
Astoria Bridge
Boat on the River - near Columbia River
Cannon Beach - Haystack Rock
Pioneer Courthouse Square
Pioneer Courthouse Square (2)
Hawthorne Bridge
Trojan Nuclear Power Plant


text:
GBP/USD: punching the cloud
Tatiana Norkina, an analyst at FBS
Consolidation that took place in the second half of the week in a four-hour Ichimoku cloud seems to be coming to an end. With the support of Tenkan and Kijun in the 57th figure, bulls went on the offensive and attacked the cloud top today. Obviously, breakdown of this level and transition into the positive zone are possible soon. Note that the cloud's nature has changed to bullish. Golden Cross, formed by Tenkan and Kijun, remains active.
Line oscillators are also growing, which gives a reason to believe in retention of a positive trend for this pair.
Technical levels: support - 1.5630; resistance - 1.5700, 1.5740 / 65.
Trading recommendations:
1. Buy - 1.5730 / 40; SL - 1.5610; TP1 - 1.5765; TP2 - 1.5800.

subset: commoncrawl


text:
Guys this is the best time to impress your Father and say Thanks to him for all sacrifices and fulfillment of everything which we need from him. He always Taught us that always stand with right things , if you are right at last you will definitely win .
Read More Fathers Day Wishes for make your Father happy on this Father's Day


text:
the highest level football league in the US, which started in 1996 and is run by the United States Soccer Federation. The league is divided into Eastern and Western regions, with some Canadian teams playing in each. Soccer is less popular in the US than other sports, but has become more popular since the national team reached the quarter-final stage of the World Cup in 2002.jump to other results
Major League Soccer
BrE ; NAmE(abbreviation MLS)
Check pronunciation: Major League Soccer


text:
Applying the logo on kegs using laser marking
Used beer kegs in our Catalog!
The process of applying logo on the keg:
Applied logos:
The process of applying logo on the keg:
Applied logos:
Used keg restoration process is remarkable! See for yourself:
Our one of a kind surface cleaning machine cleans, polishes and restores used keg surface to it's original state. Restored kegs look like new ones! We can also apply your company logos to the kegs. Check pictures to see the result. Keg Restoration services: old used keg and restored keg with logo
Some time ago JSC "Pilsena" got an order from one of the biggest Lithuanian brewery AB "Volfas Engelman" to restore 2000 pcs. of used beer kegs. We performed the following tasks:
Now the order is almost complete. Fully restored, polished and branded kegs are ready to serve once more!
We have new and even better keg restoration equipment! Now we restore used beer kegs faster and they look good as new!
Check out our new keg catalog!
We sale used and new Euro and DIN kegs.
The most common keg size in European countries is 30l. The German DIN 6647-1 and DIN 6647-2 have also defined kegs in the sizes of 50 and 20 liters.
A newer Euro regulation defines 50, 30 and 20 liters where the keg shape is usually thicker but less tall than the German keg specifications.
Euro keg
20 l
30 l
50 l
|20 l Euro keg specification download
|30 l Euro keg specification download
|50 l Euro keg specification download
DIN keg
20 l
30 l
50 l
|20 l DIN keg specification download
|30 l DIN keg specification download
|50 l DIN keg specification download
JSC "Pilsena" will completely restore used kegs to its original state and they will serve the beverage business longer! Used keg restoring process is completed in several steps:
Our experts were specially trained and are set with professional equipment and tools. We will provide a second life for your kegs!
Feel free to contact us for more information.
A keg is a small barrel. Kegs are often constructed of stainless steel. Kegs are commonly used to store, transport, and serve beverages (beer, vine and other alcohol and non-alcohol drinks).
A keg has a single opening on one end. A tube called a "spear" extends from the opening to the other end. There is a self-closing valve that is opened by the coupling fitting which is attached when the keg is tapped. There is also an opening at the top of the spear that allows gas (usually carbon dioxide) to drive the beverage out of the keg. The coupling fitting has one or two valves that control the flow of beverage out of and gas into the keg.


text:
The bar, because I must be drunk already
You decide to go to the bar, at least everyone here is human and not some flesh eating monster waiting to melt your bones into candles. Sighing you take a slow drink rubbing your temples, perhaps you just fell? Maybe you'll wake up in a hospital right now.
Your train of thought is broken when you see two girls around your age stareing at you, the chestnut hair colored girl whispers to the black haired one who giggiles nodding in your direction, your actions?


text:
Correlation integral
From Wikipedia, the free encyclopedia
In chaos theory, the correlation integral is the mean probability that the states at two different times are close:
where is the number of considered states , is a threshold distance, a norm (e.g. Euclidean norm) and the Heaviside step function. If only a time series is available, the phase space can be reconstructed by using a time delay embedding (see Takens' theorem):
where is the time series, the embedding dimension and the time delay.
The correlation integral is used to estimate the correlation dimension.
An estimator of the correlation integral is the correlation sum:
See also[edit]
- P. Grassberger and I. Procaccia (1983). "Measuring the strangeness of strange attractors". Physica. 9D: 189–208. doi:10.1016/0167-2789(83)90298-1. (LINK)


text:
Correct Parsing of json data in full and updated
This project was successfully completed by swarminfo for $60 USD in a day.Get free quotes for a project like this
Project Budget$30 - $250 USD
Completed In1 day
Total Bids9
Project Description
We,have a script up and runing where full objects and updated objects are sent by [url removed, login to view] and listening to a [url removed, login to view] the client side we have a page ready which listens to these changes and updates as soon as updates [url removed, login to view] is happening that in some cases it is updating some times these are not [url removed, login to view] misses the updates all [url removed, login to view] forward to a expert level programmer who can handle [url removed, login to view] remember you don't have to code anything from scratch just make it work all right.
Completed by:
Skills Required
Looking to make some money?
- Set your budget and the timeframe
- Outline your proposal
- Get paid for your work
Hire Freelancers who also bid on this project
Looking for work?
Work on projects like this and make money from home!Sign Up Now
- Forbes
- The New York Times
- Time
- Wall Street Journal
- Times Online


text:
Julia Fiona Roberts was born on October 28, 1967. She is an American actress and also a producer. In the year 1990 she became famous with the TVD show Pretty Woman which grossed US $464 million worldwide. This is the reason that this famous hit chick was so much popularized with the best deals. Julia Roberts hot were become viral because of that purpose of her being the hottest for among her Co-stars.
She has won three Golden Globe Awards like out of eight nominations, and not only this but she has been nominated for four Academy Awards for her film acting career too. Winning the Academy Award for Best Actress for her performance in Erin Brockovich she celebrated her grand victory with her co-stars and friends. Down the line Corino was also an actress the time that emerged to be a hit and successful stars.
Julia Roberts hot Bikini Wallpaper :
Julia Roberts famous films like
- Mystic Pizza,
- Sleeping with the Enemy,
- Hook,
- The Pelican Brief,
- My Best Friend's Wedding
- Conspiracy Theory
- Notting Hill
- Runaway Bride
- Ocean's Eleven
- Mona Lisa Smile
- Ocean's Twelve
- Charlie Wilson's War
- Valentine's Day
- Eat Pray Love
- Mirror Mirror
- and Money Monster
Julia Roberts Hot: All the above given movies were the achievements made by her and have collectively brought box office receipts of over US$2.7 billion, making her one of the most successful actresses in terms of box office receipts.
Down the line talking about the hot aspect of this chick she has been popular for her sexy figure. Julia Roberts Bikini pics were amazing and she has the sensuous touch that can be easily castes on the photos. The different bikini styles posed by this chick made it extremely the photo shoot appear amazingly beautiful.
To download all the latest photos of Julia Roberts in bikini and other actresses please follow us daily at Facebook
- Jordana Brewster Bikini Wallpaper | Hot Images in HD
- Cara Delevingne Hot Bikini Wallpaper in HD Quality
- Sexy Images of Miss Bumbum Brasil Model & Contestants
- Super Sexy Kelly brook Hot Bikini images in HD Quality


text:
You are currently using an unsupported web browser.
We support the latest versions of these browsers:
If you have any problems while attempting to download a browser, you should contact your organization's system administrator.
For any questions related to Cvent, feel free to contact our Customer Care team.
AAA Rating is a rating system for lodgings and restaurants in North America by American Automobile Association.
This rating was reported by the venue and has not been verified by Cvent.
The Hampton Inn & Suites Pittsburgh-Downtown hotel is centrally located in Pittsburgh's historic Strip District, home to open food markets, street vendors and unique shops. The hotel is across the street from the Senator John Heinz History Center, right by the University of Pittsburgh, and ...
Northstar Ratings are powered by Northstar Travel Media and are based on objective and unbiased evaluations from experienced editors that individually analyze, research, and evaluate hotels. Hotels and suppliers are not required to pay any fees or pay for memberships to have their property rated.
Northstar Ratings are powered by Northstar Travel Media. Please email firstname.lastname@example.com if you have any questions or comments regarding the rating of an individual property.
Received TripAdvisor's Hall of Fame Award for being awarded the Certificate of Excellence for 5 consecutive years.
Guaranteed 24 hours prior to arrival.
You must be logged in to view contact information for this supplier. Sign up for a free Cvent account today.
The only downtown hotel to offer complimentary breakfast, internet and parking!!!


text:
Do kids look like their adoptive parents over time?
It's not uncommon to mimic gestures and ways to speak, fashion and haircuts etc when living with someone all your life although they are not you biological family. So yes.
Do adoptive parents wish to see their kids?
Do you mean the biological parents? If that what you mean then yes most of the time Parents wish they could see their children and sometimes they'll have their child put in an Open adoption not a ...
Read More »
Why would some adoptive parents do this to their kids......?
Wow. I can't even..... wow. That's truly unimaginable......I think it would have been less traumatizing to simple "give her back". At least then she would have had the chance to be raised by a f...
Read More »
Open and honest communication between adoptive parents and their adoptive children?
Great question Possum!Awesome article! It sparked a beautiful conversation between DD and myself. Thank you. Open communication is something i would hope all parents strive for especially adopti...
Read More »
Is it possible for an adoptee to love their adoptive parents as much as their biological parents?
I understand why you're asking, but all of these questions are... off.I love my adoptive parents. I will never stop. But do I love them more than my wife? Do I love my wife more? What about my...
Read More »


text:
We're not saying the 2014 Cadillac SRX's design is old, but college freshmen have gone on to earn bachelor's degrees since the luxury crossover's last overhaul. When it'll graduate to a new design is unclear, but Cars.com reviewer Aaron D. Bragman says it's managed to stay up-to-date with the latest technology and interior fashions. Where it's fallen behind its classmates is fuel economy and cargo space. Does the SRX still make the grade, or will it need a major update to return to the head of the class? Read Bragman's review and decide.
Cars.com photo by Aaron Bragman


text:
Welcome to parkrun Support
Common Questions
- How do I find my barcode?
- How can I access my profile / account?
- How do I update my email address?
- How do I update my personal details?
- How do I claim my club t-shirt?
- Can I run with my dog?
About parkrun
- Can I use my hand cycle at parkrun?
- What is parkrun?
- Can I take part?
- How do I register?
- I am showing as an unknown athlete. What do I do?
- Where do you run?
5k parkrun
junior parkrun
- ★ The junior parkrun code
- What are junior parkruns?
- How do I register for the junior events?
- Do I have to stay with my child at a junior parkrun?
- Can I run with my child at a junior parkrun?
- Can we bring our dog to junior parkrun?
My Details
- I haven't received my registration email
- Am I already registered?
- How do I find my barcode?
- I need to update my personal registration details
- What is my athlete / parkrun ID number?
- I can't remember my password
Results & Rewards
- Where can I find my results?
- What is age grading?
- I had my barcode scanned, but I'm shown as unknown athlete
- My time / result is wrong. What do I do?
- I forgot / lost my barcode. Can you please add my time?
- Why has my time / position changed?
- ★ How do I link my parkrun profile to my Strava profile?
- Why isn't the Strava option available on my profile?
- What happens when I link my parkrun profile?
- Despite linking, I don't see the Strava logo anywhere
- I clicked OK to authorise the linkup, and got to a blank page
- How do I unlink my Strava profile?
- Can I join the parkrun Research Board?
- What is the parkrun Academic Conference?
- What if I want to make changes to my research project after I have already received approval from the parkrun Research Board?
- What if I haven't had a response from the Board within 2 weeks of sending in my application?
- How do I write a lay summary?
- How does the parkrun Research Board judge my submission?


text:
ED Magedson – Founder
Ripoff Report
West Alabama TV Cable416 Bexar Ave W Hamilton Hamilton, Alabama United States of America
Does your business have a bad reputation?
Fix it the right way.
Corporate Advocacy Program™
This report was posted on Ripoff Report on 11/17/2009 07:29 PM and is a permanent record located here: http://www.ripoffreport.com/reports/west-alabama-tv-cable/hamilton-alabama-35570/west-alabama-tv-cable-watvc-has-horrible-cable-technical-support-customer-service-ham-525111. The posting time indicated is Arizona local time. Arizona does not observe daylight savings so the post time may be Mountain or Pacific depending on the time of year.
Ripoff Report has an exclusive license to this report. It may not be copied without the written permission of Ripoff Report. READ: Foreign websites steal our content
Click Here to read other Ripoff Reports on West Alabama TV Cable
If you would like to see more Rip-off Reports on this company/individual, search here:Search Tips
In order to assure the best results in your search:
#1 Author of original report
Much better service now
SUBMITTED: Wednesday, December 18, 2013POSTED: Wednesday, December 18, 2013
Over the past few years, I have actually started to see my service improve. The company seems to have done a pretty significant turnaround since I posted. There are occasional issues, and I understand that will happen with any company. The only complaint would be that they should offer more internet options as well as competitive pricing.
Are you an owner, employee or ex-employee with either negative or positive information about the company or individual, or can you provide "insider information" on this company?
Advertisers above have met our
strict standards for business conduct.


text:
You are a fan of gears treyarc ? Come to discover the best forums gears treyarc on the internet and share your experience with a community fan of gears treyarc . You can also build a forum gears treyarc and create your online discussion.
Free forum : Mercenaries Of Honor Gaming Clan. Mercenaries Of Honor
free, mercenaries, honor, gaming, clan, call, duty, #gears, xbox, playstation, halo, crapgamer, fevens, designs, modern, warfare, movie, reviews, game
Play-by-post World of Darkness Crossover forum RP
turning, #gears, london, play-by-post, world, darkness, crossover


text:
What is JotForm?
JotForm is a free online form builder which helps you create online forms without writing a single line of code. No sign-up required.
At JotForm, we want to make sure that you're getting the online form builder help that you need. Our friendly customer support team is available 24/7.
We believe that if one user has a question, there could be more users who may have the same question. This is why many of our support forum threads are public and available to be searched and viewed. If you'd like help immediately, feel free to search for a similar question, or submit your question or concern.
My form is not loading correctlyAsked by SHBAOU_RandA on August 11, 2015 at 12:47 PM
Not sure why, but every few days my page does not load correctly.
JotForm Support
(Private)Answered by BJoanna on August 11, 2015 at 02:35 PM
You provided link of submission, but you probably wanted to provide us link of your form: https://www.jotform.com/51936895369172
I have tested your form and it is loading correctly on my end.
Did you maybe embedded your form to website? If so, please provide us URL or your website.
Maybe your network connection was slow and because of that your form was not load correctly.
I can suggest you to clear your form cache and browser cache. You can also try with different browser.
Let us know if you need further assistance.
(Private)Answered by SHBAOU_RandA on August 11, 2015 at 02:58 PM
Correction, when I view my submissions, http://www.jotform.com/submissions/51936895369172, the page does not load properly. All the test is to the left of the page and when I scroll down the page it is mostly a grey page.
I cleared the form and browser cache without success.
JotForm Support
I have login to your account and checked submissions page and it is loading correctly.
Did you try with different browser? Can you also provide us a screenshot how do you see submission page on your end?
Looking forward to your reply.


text:
myrrth Review
Very pretty and decent weight - but a little iffy
I needed new towels and wanted a nice color orange, and for that these fit the bill. The color, size, and weight was very good - but after I washed the hand towels and wash cloths, I noted a number of pulls and some of the border stitching was coming out. If you need extra towels in one of these colors they would be really good for the price. I returned them since I wanted something a little better made and durable.
- How did the color on site compare with the actual product? Color was accurate
- Please tell us about the quality of the product. mediocre
- How accurate was the on site description of the product? OK
Was This Review Helpful?


text:
we sometimes encounter downtime from our ISP which really affects our email server. It might be a great help to use secondary connection at different ISP to avoid such email lost in our daily operation.
2 Replies
· · ·
Dec 17, 2010 at 3:26 UTC
host the email server somewhere with better realibility or swap ISP's as if the ISP is down how can you reply anyway?
you can have mutliple MX records no problem.
· · ·
Dec 22, 2010 at 3:46 UTC
We have 2 ISPs (DSL and Cable) coming into a sonicwall. If primary fails, then email is routed to the alternate ip address. Keep in mind we send/receive email thru a third party. Thus far seems to work out ok.


text:
West Bengal | Uttar Pradesh | Uttarakhand | Telangana
Bangalore | Delhi | Mumbai | Chennai
Oyster Mushroom
We are providing good quality & hygienic mushroom to our customers. We deal in dry and fresh oyster mushroom.
Nature Mushroom
Nature Mushroom,sangli,maharashtra.416416., Maharashtra , India
Tell us your Buy Requirement to Get Instant Response


text:
Managing partners:
Robert Bryars and Martin Sissons
Turnover: £7m
Total number of partners: 18
Total number of fee-earners: 77
Main practice areas: Commercial property, company and commercial, crime, personal injury and medical negligence, private client and residential conveyancing
Key clients: Cendant Mobility, Fretwell-Downing Group, GR Industries, Heltcorp, Hillcare, NH Greaves & Co, Servo Computer Services and TKL
Number of offices: One
Location: Sheffield
The last 12 months represented a year of change for Ashton Morton Slack, the largest non-national law firm in Sheffield, which reverted from AMS Law, as it had been called for the past five years, to its old, more traditional name. "We didn't think that the name suited the kind of image that we wanted to portray," says managing partner Robert Bryars. "We're not an LA Law-style, flashy firm, so we reverted to our old name after a rebrand. The previous 15 years we had been known as Ashton Morton Slack and we felt that we lost some of our identity when we changed our name."
Bryars claims that the rebranding was far more than a renaming. It included a major restructuring of the way the firm delivers services. "We've been working on new strategy for 18 months and have changed the firm dramatically," says Bryars. "We thought we lacked direction and, like many law firms, we'd grown but we hadn't grown as one. Effectively, there were nine separate firms within the practice with separate departments, and each department was running the business the way that they wanted. Now they've been brought together."
The firm now organises work into three divisions: business, personal injury (PI) and private client.
More than 50 per cent of the practice is claimant PI work, and the firm represents several household insurance companies, including Admiral, and two trade unions, including the shop workers' union Usdaw. "Although we're based in Sheffield, our reputation in PI has attracted a national client base," says Bryars.
During the recent overhaul the firm created a business division. It acted for Sheffield-based GR Industries in its acquisition of the Bradford-based cosmetics industry supplier Harmer Personal Care (now renamed Hallam Beauty) last month for an undisclosed sum. The move boosted the company's turnover for the coming year from £45m to £60m.
Last year the firm won the 'Training and Development' category in the Sheffield Business Awards. Bryars says the "strategic goal" is to be listed within The Sunday Times's top 100 places to work. "This will be achieved through a commitment to the firm's award-winning in-house training programme and fostering an inclusive culture," he says. "The philosophy puts the focus on people, and I believe that can be seen in the levels of client service. We're friendly and we work with our clients, which gives us an edge over our competitors."


text:
Have you the Springfield xd 45 compact? I have had good luck with mine so far and also the wife has no problems shooting it.
Hey guys new here but have gun experience. I currently have a S&W 1911 in .45 cal. I am looking into getting a new CC pistol/wife birthday present (dual purpose) I have been steered a couple of different direction by my military buddies but am not sure what is best. I want to keep it in the .45 cal just for ease of ammo being I already have a .45, unless persuaded otherwise towards a smaller caliber.
-Smith and Wesson
I am leaning towards the Glock due to the "Built like tank" reputation they have. But also keeping in mind I want it to be a CC.
Thanks for the input guys.
Have you the Springfield xd 45 compact? I have had good luck with mine so far and also the wife has no problems shooting it.
If those are your 3 choices,I'd go an M&P.I don't think much of Blocks and Taurus' QC is too spotty for me.
If you really want built like a tank,forget Glock and invest in an HK.There's more quality in just the slide's machining than in a whole Glock.
There's nothing wrong with a Glock. They are made very tough and are reliable to a fault. The G21SF is a nice piece. Rex mentioned the M&P. I can vouch for that one, too. I have an M&P 45 with the full size frame and 4" barrel. Balance is excellent as is the feel and handling. Install an Apex Tactical hard sear and their USB (Ultimate Safety Block) for a real winner and a trigger who's second stage is very much like a 1911.
Lots of good stuff out there. Take your time and don't rush this.
Never had a problem with my glocks ,not one. I have been thinking about the new glock 30s. Would like to shoot one first though.
I wont be rushing, HER birthday and MY new CC day is a ways out haha.
I like the specs of the HK 45, but was also wondering about the USP compact, they look similar but not sure of the differences in them as I have never had my hands on either one. (No one around here carries them)
I have a fullsize USP,they're big.I looked at a compact but I have a Commander that holds 8 rounds so I couldn't justify that one.I haven't had my hands on the HK45s but everyone seems to like the feel over the USP,you;ll just have to hold them to compare.
From what I gather the internals of the HK45 are very close to the USP but there are some differences,what I don't know but the Match trigger from the USP appears to drop in it.I still have less than a box through mine and the Match trigger comes in right under 5lbs,and they really smooth out through the first 1000 snaps or shots.It isn't quite a 1911 trigger,but it's real close.Mags are not cheap though and sucks spending $60 for one,but.............
They are strong.Testing on the MK23 and I think the USP,they lodged a bullet in the bore and shot it out.While the barrel swelled as it should the gun still functioned and was pulling something like 6"groups still.I don't like plastic,but HK is probably the only one I'd own.Doesn't hurt it's laid out like a 1911 and I like the mag release design.
The HK45 (or 45C in this case if you're looking for a smaller gun) is a more refined version of the USP. It features a picatinny (1913) rail that is more accessory friendly than the proprietary rail on the USP, has a more ergonomic grip, an enlarged magazine release, and changeable back-straps to get a better fit. The slide stop/release is also a little different as is the safety lever.
If we're talking about the full size HK45 vs. full size USP, the USP holds 12+1 while the Hk45 holds 10+1. They thinned out the magazine to make for a more comfortable grip.
I've never been a big fan of the USP, but I love my HK45 and other P-Series pistols.
The triggers on the HKs aren't that great, I'm digging the LEM but the DA/SA variants aren't that great in my opinion but there are plenty that like them just fine.
The magazines are expensive, twice that of a Glock or M&P magazine and holster selection can be limited depending on budget. Same goes for the gun, for what you pay for a new in box HK, you can get a Glock or M&P, a nice holster, and a couple extra magazines.
I'm not all that happy about Glocks .45ACP offerings and would probably look at the Smith M&P line of pistols in .45.
The HK45 Variant 1, which is the most commonly found form has a thumb safety and de-cocker. Is a manual safety a requirement? The location/function of the de-cocker of the V1 pistols can be problematic for some (me included) in that if you ride the safety too hard you can de-cock the pistol while firing.
There's a ton of possible combinations for the pistol and how it works, but trying to find the exact combination from a dealer is rare depending on what you want.
Guns can always be sent in to HK for retrofitting, or if you're adventurous you can do some of the conversions yourself.
Springfield XDS!
I own a Glock 36 and it shoot fine. There are times I feel that I need more than the 6+1 but I have never needed more than 6 rds either so I am safe I feel for 96% of the times I believe. Springfield has got a new slim .45acp out there but I trust a glock to go bang when I pull the trigger so that is what I carry 90% of the time. I mostly carry a Glock 19 9mm with 15rds as I can shoot it faster than a 45acp and place the bullets in the K5 at a better rate too. Don't get me wrong or debate the 9mm vs .45acp but I feel shot placement wins fights but if a I knew a man was going to kick in my door I am going to grab my Kimber 1911 8+1 230gr 45acp JHP Golddot or Hydroshok. You should go to a range and shoot the different calibers with your wife and see what she feels comfortable most with. I can almost assure you that a 9mm would serve her better in the long run.
Thanks for all the input guys, and keep it coming if you have a different idea too.
I have the G30sf I really like it for a .45, even though it is bigger then my XDs .45 I prefer to carry my it. It carries more rounds and for me it just feels right. I haven't had one problem with either one the both shoot whatever I have fed them.


text:
Acme Electronics Inc.
6020 Olson Memorial Hwy Minneapolis, MN 55422-4929
Industries: Wholesale
Technologies: Acme Electronics Inc. is using 1 Technologies.
Employees: We found 0 verified contacts and 1 unverified employees.
Social Media: Acme Electronics Inc. has 4 social media shares and likes.
We have 1 emails for Acme Electronics Inc..
Verified Contacts from
Similar Wholesale Companies
Unverified Contacts
These are contacts we've discovered through publicly available sources and might be outdated.
Use our PerfectLink™ Contact Finder to verify contacts.
aeielectroniccenter.com Emails
Sign up to get full access to all the aeielectroniccenter.com emails we have.
Find emails for Acme Electronics Inc. executives, including the Chief Executive Officer, Chief Financial Officer, and Chief Marketing Officer.
Note: Only company contact information will be added. To discover and add individual contacts to My Prospects, please click though to the Company Profile page.


text:
From the Hearts & Hands of Artisans ®
Fragrant Balsam Potpourri Vessel
Availability: Almost gone!
Our Georgia artisans have redefined decorative fragrance accessories for the home. This wax potpourri vessel is hand poured and embedded with natural and silk botanicals. Each releases a long-lasting fragrance freshly cut balsam boughs. Approx. 7 in. diameter x 2.5 in.
Certificate of Authenticity Included


text:
Voice-Over Workshop Teaches Tools You Need To Succeed
Burlington, Vermont –Acclaimed voice-over training company, Such A Voice, celebrates 20 years of teaching the art of voice-overs in over 170 locations, in 30 states and 2 countries. Their introductory course, aptly named, "You're On the Air…How to Really Make it in Voice-Overs," prepares individuals with no previous voice-over experience to carve out careers in the voice-over industry. By incorporating industry experience with talent-scout know-how, the class is designed to equip its students with everything they need to build fun, lucrative careers within just a few short months.
Voice-overs are defined as any recorded voice unaccompanied by an image of a speaker, including voices heard narrating commercials, announcing public service messages, informing callers of their options inside voicemail systems or reading a podcast. Because of the variety of voice types in demand, many different voices can find their niche in the industry. Such A Voice's coaches, all working voice-over professionals, are trained to recognize unique qualities in individual voices. During the course, they teach students not only how to showcase these vocal characteristics when recording, but also how to market themselves effectively. Each course includes a mock demo session in which students read scripts into a microphone and hear the results of their very first "spots," played back. The coaches then provide a voice evaluation for each student, detailing individual strengths, weaknesses, and potential for success.
The course also covers some unique marketing strategies that pertain to new voice talent. It instructs students on how to promote their best vocal traits while detailing the tools they will need to market themselves in the industry. The nature of the business allows for flexible hours; many voice-over professionals work from home or around other full-time or part-time jobs. Its adaptability to self-scheduling makes a voice-over career an ideal choice for those balancing work and family commitments.
Through Such A Voice's beginner course, breaking into the voice-over industry is a relatively quick process. Students who take the course and actively pursue entrance into the voice-over industry typically find themselves in a new career within four to six months. For those who do not have classes offered in their area, a free online version of the course can be viewed at www.suchavoice.com.
For more information or to find a course in your area, visit www.suchavoice.com.
# # #
Tony Award Nominee and Clio Award-Winning Producer Dan Levine and his company, Such A Voice, offer seminars on voice-overs throughout the country. Founded in 1989, Such A Voice provides voice technique training, network-quality demo production and modern marketing strategies designed to help individuals achieve success in the voice-over industry.<
# # #
Friday, March 13, 2009
A New Career in Less Than A Year
Posted by Such A Voice at 9:49 AM 0 comments Links to this post
Subscribe to: Posts (Atom)


text:
Little Pig Man
Dink had an inkling of what he was getting into when he decided to wage war on his department at the factory, but he was up to h-e-r-e with being a selfless, generous do-gooder. It had never gotten him anywhere in life, far as he could see. Aside from his management position at the plant, his beautiful wife, expensive home, and newborn daughter, his life was going absolutely nowhere.
Maybe not everyone would see it that way, but fortunately, Dink realized early in life that most people weren't very bright. Once this became clear, he knew that his sole purpose in life was to tell people what to do. These days, no one seemed that interested in listening though, and it was high time they paid attention.
As Dink strolled passed the hogs squealing in terror, he stroked the soft pink roll of his fleshy chin, contemplating what might easily go wrong for Jeb, the assistant-manager on his team who had been giving him lip lately. Oh, Jeb, you should know when to shut up and take it like a man. All that whining about long hours, inhuman conditions for your boys. Now it's time to take one for the team, Jeb. Dink laughed quietly to himself.
Being high on the food chain was an advantage at the meat packing plant. Oh, Jeb would pay. A hog shrieked with precognition as she entered the killing floor.


text:
We may not be the happiest broadband users in the world, but more and more of us are getting online - not matter how awful our services...
Figures from the UK Online Measurement Company (UKOM) show as of May 2010 we have now reached 38.8m active web users, an increase of five per cent since the same time last year. This works out as approximately two thirds of the circa 60m population.
Perhaps most interesting in this is the biggest gain was seen in the over 50s - the so-called 'Silver Surfers' - who were responsible for a whopping one million of the 1.9m annual increase. Men dominated this older group accounting for 722,000 new connections with women over fifty the second largest mover with 284,000 additional users.
"The Internet is getting older in more ways than one," said Alex Burmaster speaking on behalf of UKOM/Nielsen. "Not only is the medium itself maturing but the audience is shifting towards older age groups. This growth is a reminder, if one was still needed, that it is very much a form of media utilised by all age groups. The fact that one in four Britons who use the Internet today are 50 to 64 years old proves it is no longer the sole preserve of the young and technical literati."
I feel very strongly about encouraging older citizens to embrace the Internet and we touch upon this topic in our impending sixth TrustedReviews podcast (keep your eyes peeled). The crux of my argument is - despite all its ills - the Internet is a good thing. It helps users better keep in touch with friends and family and, in the case of much older surfers, can open virtual doors onto places they may no longer be able to visit in real life.
In fact, I'd argue the Internet is more important for this age group than younger generations who can kick a football, go for a run and generally get out and about. I, for one, know that when I get old I'll be throwing myself into a virtual world where I'm as mobile as Usain Bolt wearing a jet pack. And I'll still thrash you all at Pro Evo Soccer...
UKOM Press Release (PDF Warming)


text:
Paiste PST 3 10 Inch Splash Cymbal
Paiste PST 3 10 Inch Splash Cymbal
The fusion of Swiss cymbal sound know-how with German hi-tech expertise. The PST 3 10 inch Splash Cymbal represents a breakthrough combination of quality and value with superior sound and appearance.
Paiste PST 3 10 Inch Splash Features
• Sound Character: Medium bright, clean, fast. Medium range, fairly complex mix. Even, balanced feel. Explosive, fast fading splash with a somewhat trashy character. Well suited for fast accents.
• Size: 10 Inch
• Weight: Medium
• Volume: Medium soft to loud
• Stick Sound: fairly washy
• Intensity: Fairly lively
• Sustain: short
• Bell Character: Integrated
- This product is on order with our suppliers
This item is normally sent to Mainland UK addresses by DPD who generally provide a one-hour window of delivery on the morning of delivery by email or text message. If you need this item faster, please upgrade to a Before 12 service at checkout.
FREE delivery within mainland UK
UK Non-Mainland: £ 12
Rep. of Ireland and Mainland Europe: from £ 15 (calculated at checkout)International orders over £250 are delivered FREE.
Order this item before 4pm and receive it on the next working day, mainland UK only*
1 Recommended Accessory
Additional Information
On demo in store No Brand Paiste Condition New
Other products to consider
Paiste PST 3 18 Inch China Cymbal Add to compare£58.52Ordered on Request*
FeeFo Reviews
|Customer Comment
|Our Response
|great cymbell...fast and crisp...thinking about the pst 5 for a ride cymble
|great sound and complements my set up perfectly.
|Good product
|Read more reviews on Feefo


text:
An air leak in the fuel line of a car means air is getting into the system when there should be a vacuum. This disrupts the air-to-fuel ratio and may result in symptoms like hissing, rough idling or ignition and fuel problems.
An air leak is most evident when the car is idling, because that is when extra air entering the system can make the most difference. At higher engine speed, air intake rises and extra air is less noticeable, according to the AA1Car website. Idling may be rough or fast.
Leak Points
Whether an engine has fuel injectors or a carburetor, there may also be stalling or misfiring. Common locations of leaks include the gaskets in the intake manifold and the O-rings in the injectors.
Methods of detecting air leaks include visual inspection, using an electronic vacuum leak detector or exhaust analyzer. Sometimes, it's a simple manner of tightening bolts on the intake manifold or carburetor, but if hoses and parts are worn, they should be replaced.
Related Searches
You May Also Like
Why Does My Ford Taurus Idle Rough?
Rough idling can be caused by a number of things. If the engine's self-diagnostic system isn't of any help, then diagnosing the...
How to Remove Air From Fuel Lines in a Fuel Injected Engine
Along with the joy and freedom of owning your own vehicle come the difficulties of repairs and maintenance. If you want to...
How to Find a Fuel Leak
Take precautions to prevent risks to your health and home when looking for a fuel leak. Do not smoke while you perform...
How to Fix Leaking Fuel Lines
Keeping the fuel lines in working order on your car or vehicle is important. A leaking fuel line can expose gasoline or...
How to Bleed Air in a Gas Line
Vehicles and tools powered by gas that have been stored for awhile must have their fuel lines bled so any air is...
Clogged Fuel Line Symptoms
A fuel line is a hose placed in the engine of an automobile or other vehicle. It controls and regulate the flow...
Water Leak Detection Methods
A water leak in a pipeline system that serves an entire building for example, besides representing a financial loss, can lead to...
Symptoms of a Fuel Line Freeze Up
In the winter, your car's fuel line can freeze up very easily. This usually happens when the gas level is below half...
Natural Gas Leak Symptoms
For a majority of Americans, natural gas is a clean, efficient source of heat. It is generally safe, provided you properly use,...


text:
De beers
Prozkoumejte související témata
The De Beers Phenomena Reef Necklace features a stunning 8.49ct pear-cut diamond.
La bague "Aura" de De Beers http://www.vogue.fr/joaillerie/le-bijou-du-jour/articles/la-bague-aura-de-de-beers-1/15763
De Beers Diamonds
A De Beers millennium blue diamond which will lead the Sotheby's Hong Kong Magnificent Jewels and Jadeite 2010 Spring Sale on the 7th Apri
De Beers simple shank emerald-cut Fancy Vivid yellow orange diamond engagement ring in platinum.
De Beers -The graphic lines in our Battersea Light design reflect the beautiful shapes of the historic power station on the River Thames
Perfectly unique the delicate detail of this Phenomena Frost Necklace is in rich juxtaposition to the frozen solidity of each icy formation.
De Beers Diamonds Lotus Collection
De Beers Unveiling Earrings.
De Beers Imaginary Nature jewel being worked on the atelier. The blue pieces are wax casts of the different platinum components. #goldsmith


text:
Sometimes a website does not need a full fledged shopping cart system, only a product listing page and order form. The benefit of SecureForm is the ability for the user to purchase the products they want from one page. SecureForm features a completely dyn
User Reviews
Be the first to post a review of SecureForm!


text:
Ialuset Cream Tube 100g
Ialuset Cream 100g: Healing in the treatment of non-infected, oozing or secondary infection, acute or chronic leg ulcers whose wounds.
In stock
Warning: Last items in stock!
Availability date:Preview the Shipping Fees - Free Shipping from 99€*
Ialuset Cream Tube 100g
Description Ialuset Cream Tube 100g
Healing of uninfected wounds oozing or secondary infection.
Ialuset cream is based compound which acts on hyaluronic acid in all phases of the healing process. It accelerates healing and re-epithelialization of skin lesions. His power hygorscopique maintains a favorable process of tissue regeneration humid environment.
Cream 100g of use Ialuset advice
After having carried out the cleaning of the wound with saline, directly apply the cream on the wound thick layer of 2 to 3 mm thick.
Applied directly to the wound layer of 2 to 3 mm thick and covered with sterile gauze or deposited on a subsequently applied to the wound sterile gauze.
Maintaining the assembly by a bandage.
1 application per day until complete healing.
Composition Ialuset Cream Tube 100g
Sodium hyaluronate.
Excipients: surfactant, oleic acid decylester, emulsifying wax, humectant, glycerol, methyl-p-hydroxybenzoate and propyl p-hydroxybenzoate, dihydroacétate, acidulant, perfume, water.
Presentation Ialuset Cream 100g
Tube of cream 100g
Save time by using the quick order form. With a few clicks , you can easily order your favorite references.
Be fan of our Facebook page and get 5 % discount!
If you are not logged in to Facebook, please first log in and then refresh this page before clicking the Like button. Otherwise, you will not get your voucher.


text:
Fight Time 15 6/22/13
Fight #10 MAIN EVENT (155lb): JP Reese vs Julian Lane: Lane wins via Guillotine at 2:45 of the 1st round.
Fight #9 (Catchweight 140lb): John De Jesus vs Tilo Quintanilla: De Jesus wins via Unanimous Decision 30-27, 29-28, 29-28
Fight #8 (145lb): Randy Barroso vs Tristan Payne: Barroso wins via KO at 0:47 of the 1st round.
Fight #7 (185lb): Carl Darbouze vs Robert Reed: Reed wins via Triangle Choke at 4:27 of the 3rd round.
Fight #6 (205lb): Fatih Cam vs Joe Johnson: Cam wins via TKO (fighter was knocked out cold) at 4:56 of the 1st round
Fight #5 (125lb): Jamie Alvarez vs Mike Wilson: Alvarez wins via Rear Naked Choke at 2:40 of the 1st round
Fight #4 (135lbs): John Rivera vs Kester Mark: Mark wins via Rear Naked Choke at 2:23 of the 2nd round.
Fight #3 (Catchweight 130lb): Saul Alencar vs Edwin Sarria: Sarria wins via Unanimous Decision 30-27
Fight #2 (170lb): Michael Graves vs Danny Finz: Graves wins via TKO (strikes) at 1:26 of the 1st round.
Fight #1 (145 lb): Patrick Thomas vs Edir Terry: Terry wins via Rear Naked Choke at 1:09 of the 1st round.


text:
Affiliate Programme
Do you want to become an affiliate of 365games.co.uk?
If you have your own website then you can get on-board with the 365games.co.uk affiliate marketing programme, managed by Affiliate Window.
We allow you to sell our games, t-shirts, gadgets, toys, collectables and more through your own website using a simple URL with a tracking code.
We are based in the UK and deliver worldwide. All our games are PAL or region-free and are fully compatible with UK consoles. By buying form 365games.co.uk customers can save uo to 50% off the retail price of many games and our Player Points scheme allows you to store up credit to spend on site. Once the item has been dispatched, we pay you for your hard work!
So what are you waiting for? We have over 36,000 products for you to promote and earn commission from. Get started today!
How does it work?
What is on offer?
At 365games.co.uk we offer you commission based on sales. Simply sell to new customers and get 5% of revenue from their basket value, or to an existing customer and get 2%.
We have plenty of banners, links and regular offers to ensure you have plenty to work with.
365games.co.uk sell a massive range of video games for PS3, PS4, Xbox 360, Xbox One, Wii U, 3DS, DS, PSP, PS Vita, PC & Mac. We offer the best savings on the best products with great shipping times to match!
Save up to 50% off the retail price of many games and DVDs/Blu-Rays, and get exclusive offers on posters, toys and more!
To get started
- 1. Apply to be our partner with us on Affiliate Window.
- 2. Affiliate Window charge £5 to review your site and apply as part of their security checks, and will be credited to your account once approved.
- 3. When you have successfully joined us you will have access to all the links, banners and information you need to start earning!
So what are you waiting for? Click here to join 365games.co.uk affiliate programme
Still got questions? Why not take a look at the Affiliate Window site?


text:
I always wanted to put our real tree in the family room but there was never enough room to make it work without it being so close to the fireplace, which we use often. So when we decided to add a second, artificial tree I was so excited to add it to … [Read more...]
10 Minute Decorating – Chalk Marker Galvanized Maple Bucket
I am a big fan of decorating that I love and that can be done in 10 minutes or less. I love it so much that I started a whole series on it, called 10 Minute Decorating Ideas. I know, a very revolutionary name. Last year I shared how I used three … [Read more...]
Let it Snow Chalkboard & Galvanized Village Christmas Mantel
Even before I blogged, I loved decorating our mantel. Of course, back that it was much smaller and looked very different, but I still remember really feeling like I was creating a home when I decorated our mantel. When I began blogging, it seemed … [Read more...]
Welcome to our Home for Christmas
Christmas time. We are all in and ready. Mostly. There are still some bins here and there to head up to the attic and we still have to cut down our "real tree", but it feels good to have the halls decked and the mistletoe hanging. And the … [Read more...]
Evergreen & Candy Cane Christmas Table Setting
I am so excited to be sharing some of our home decorated for Christmas and to start with our kitchen table all set for a holiday meal. If you are joining me from Ann On Sutton Place, thank you so much for coming along. I have learned a thing or … [Read more...]
Free Printable Holiday Gift Tags & Christmas Ornaments
Each year as I start thinking about decorating for Christmas, it always starts with the colors. I always consider neutrals, but in the end I know that I am just not a neutral girl. One of these days I think I will go all crazy and bright, but this … [Read more...]
Simple Ideas for a Thanksgiving Table
How is it possible that November is next week? Thanksgiving planning is beginning to ramp up and lead us into the holiday season. There is nothing I like more than decorating our home for the holidays and welcoming in our friends and … [Read more...]
Bringing Fall Into Our Screened Porch
I am going to speak the truth today. Our little business of selling maple syrup, soy candles and home decor products has kind of taken over the whole house. Like really. I am starting to go a little bit mad. The garage has become our … [Read more...]
Our Most Asked Question – Our Exterior House Colors!
Of all the questions I get on the blog, one happens again and again. And each time, I respond and let the reader know that I don't have a good answer for them. What's the question? What color paint did we use on our house, shutters and … [Read more...]
Our Farmhouse Screened Porch
Disclosure: This post is sponsored by Wayfair.com. Our screened porch has long been one of my favorite spaces in our home, and now it is just our style. It is where the slower nights happen, where conversations flow and we just … [Read more...]
A Vintage Garden Tool Gallery Wall
I am at it again. I can't help but work on projects with vintage doors. This door used to house a plate wall, but I have been finding myself drawn to vintage garden tools lately and before I knew it, I had a collection. I piled them on … [Read more...]
A Laundry and Mudroom Refresh
This is the highest traffic room in our house. It is our mudroom, it is our laundry room, it is our main entrance for the day to day. The dogs are fed here, the mail is piled here, the coats and bags are hung here and the stains are … [Read more...]
Toolbox Towel Bar, A Bathroom Update & a Video
It has long been established that I have a bit of an obsession with vintage toolboxes. I remember the day I found this one so clearly. It was about 13 years ago. There was a vintage "shop", and I use that term loosely, that didn't last … [Read more...]
My New Love – Terra Cotta Pots
I am totally smitten and in love with terra cotta pots. It started last year when we went to Italy. Where we were staying had these amazing and huge terra cotta pots all over the grounds with simple green leafed plants, sometimes with … [Read more...]
Welcoming Summer in Our Home
We may have jumped the gun a bit, but the pool is open my friends. It was either last week or not for a few weeks in terms of timing, so we decided to gamble and go for the earlier one. Weather reports are showing that me just may have … [Read more...]
Getting Ready for Summer
I am feeling very impatient. In so many parts of the country, schools are already out for summer - and we still have more than a month left. I am not sure I am going to make it. In the meantime, I am going to be dreaming of flowers, … [Read more...]
New Screened Porch Dreams
I love summer. I love when my kids are home. I love even though we work from home that schedules slow, friends hang out and meals are eaten outside. I am finding a new intensity into my to-do list so that by the time my kids get out of … [Read more...]
Sometimes Staying the Same Is a Good Thing
Did you know that Pinterest started in December of 2009? What did we ever do before that? I know what I did. I tore pictures out of magazines and then glued them into notebooks. I still remember the first one I put together at my … [Read more...]
Loving What is Around You and Making Room for What You Love
A friend of mine recently added an addition onto her home so that her mom could begin living with her. I happened to be there as she was loading some of her things back in her kitchen with her sister. I found myself reflecting back on … [Read more...]
DIY Vintage Door Vanity Desk for a Teen
Slowly, but surely, we have been working on my younger daughter's room. I must admit, when we started, she was still a "tween" and she is now officially a teen. So, now that she is a teen I can officially call this project a DIY vintage door … [Read more...]
Worth the Hassle – Decorating Our Spring Family Room
Recently I shared how I felt as thought I had gone "decorating blind". It had been so long since I had spent any time decorating our home and showing it any love. So much time had gone by, I wasn't even noticing it anymore. And, as it turns out, … [Read more...]
- 1
- 2
- 3
- …
- 21
- Next Page »


text: Anyone from Ortho Clinical hit today? I was surprised to see the CAM position eliminated, they kept saying how they would dip into field sales. Any insight as to how safe the AM position is? Seems like our territories are already plenty large, I can't see too much consolidation taking place without having an effect on driving revenue.. Thoughts?


text:
"He thinks less than he talks, and slower; yet he can see through a brick wall in time (as they say in Bree)."
--Gandalf the Grey, about Barliman Butterbur
The Lord of the Rings: The Fellowship of the Ring
J. R. R. Tolkien
Barliman overview
Barliman is a prototype "smart editor" that performs real-time program synthesis to try to make the programmer's life a little easier. Barliman has several unusual features:
given a set of tests for some function
foo, Barliman tries to "guess" how to fill in an partially-specified definition of
footo make all of the tests pass;
given a set of tests for some function
foo, Barliman tries to prove that a partially-specified definition of
foois inconsistent with one or more of the tests;
given a fully or mostly-specified definition of some function
foo, Barliman will attempt to prove that a partially-specified test is consistent with, or inconsistent with, the definition of
Barliman is general enough to handle multiple programming languages. In fact, the user can even specify their own programming language, or change the semantics or syntax of one of the default languages that come with Barliman. The default language for Barliman is a small but Turing-complete subset of side-effect-free Scheme that supports recursion, list operations, higher-order functions, multi-argument and variadic functions, and a few other features.
Purpose of Barliman
(test my hypothesis that even very modest or slow program synthesis can be useful, if it is part of an interactive conversation with a programmer)
(explore utility of interactive synthesis)
(explore design for such an interactive tool)
(try to inspire others to build similar tools, perhaps using radically different implementation techniques)
Barliman in action
Here are a few screenshots of Barliman, using the Mac implementation as of June 4, 2016. (Update: I've added a few newer screenshots from June 16, 2016. Once Barliman stops changing as rapidly I'll update all the screenshots.)
The first screenshot shows the main editor window. The
Scheme Definition edit pane contains the complete (fully instantiated) and correct definition of
append , the list concatenation function in Barliman's default "miniScheme" language.
append will be our simple running example in these screenshots. The edit window also contains three tests; each test contains an input expression, and the expected value of that expression. The
Best Guess pane, which is not editable by the user, contains the same fully instantiated definition of
append as in the
Scheme Definition edit pane.
All the text in the editor window is black, indicating that all the information in the editor is consistent and valid. The definition of
append is a valid symbolic expression (s-expression), and is indeed a syntactically valid miniScheme definition. The test expressions and expected values are syntactically valid, and consistent with each other.
The editor window displayed in this first screeenshot is similar in spirit to a modern integrated development environment (IDE) that runs tests whenever the code to be tested is modified.
Let's see how we might have gotten to the final version of
append using Barliman.
screenshot 1: Fully instantiated definition of append
Screenshot 2 shows the empty main editor window, immediatly after starting Barliman. We know we want to define
append , so in true test-drived development style we begin by writing our tests cases.
screenshot 2:
Screenshot 3 shows the main editor window with our three tests. The first test says that if we append the empty list to the empty list, we should get back the empty list. You should be able to figure out the other two tests.
The text for all three tests are red, indicating that none of the tests pass. This isn't surprising, perhaps, since we haven't started to define the
append function.
(From an interface design standpoint, whether to use colors, which colors to use, which text fields to hilight, etc., are all open questions in my mind. Over time I hope to make it much more clear exactly which part of the code is failing, and why.)
screenshot 3:
Screenshot 4 shows the main editor window after we have begun defining
append in the
Scheme Definition edit pane. Our parentheses are not balanced -- we haven't yet typed a closing parenthesis for the
define form. Because of the missing parenthesis, the definition is not a legal Scheme s-expression. The tests cannot pass, of course, since
append isn't even an s-expression. Barliman recognizes this, and turns the text in the
Scheme Definition edit pane, and the text in the test edit fields, a sickly green color.
(Future versions of Barliman should include a structured editor that will automatically insert balanced parentheses.)
screenshot 4:
Screenshot 5 shows the main editor window after we have added the closing parenthesis in our partial definition of
append in the
Scheme Definition edit pane. The partial definition of
append is now a legal s-expression. However, the definition of
append is not syntactically valid according to the rules of miniScheme. Of course, this invalid definition of
append causes all the tests to fail as well. Barliman recognizes this, and turns the text in the
Scheme Definition edit pane, and the text in the test edit fields, red.
(Currently Barliman doesn't actually check that definitions are grammatically correct. Rather, Barliman uses evaluation of the tests to check whether code is semantically legal, rather than syntactically legal. Future versions of Barliman will probably include explicit grammars that are checked, in addition to semantic rules.) (Update: Barliman now includes a relational parser for the miniScheme language, as is shown in the newer screenshots at the end.)
screenshot 5:
In screenshot 6 we can see that the programmer has partially specified the defintion of
append . The definition is a syntactally-correct s-expression, and indeed is a syntactically correct use of miniScheme's
define form. Importantly, the definition of
append is only partially specified, and contains four (logic) variables (
C , and
D ) representing unknown subexpressions. In Barliman variables representing unknown subexpressions are single-letter upper-case variables
A through
Z . (Note to Schemers: The comma (
, ) that usually occurs before these letters is necessary because the code in the
Scheme Definition edit pane is implicitly quasiqoted.)
Given the partially-specified defintion of
append in the
Scheme Definition edit pane, along with the three tests, Barliman is able to correctly "guess" the code corresponding to these variables. The correct and complete definition of
append is displayed in the
Best Guess pane. Barliman guesses the correct code in this case in a second or less. All of the text in the main editor window is black, indicating that all of the code is syntactically correct, and that all three tests pass given the completed definition of
append shown in the
Best Guess pane.
screenshot 6:
Screenshot 7 shows an incorrect partial definition of
append . As in the previous screenshot, the partial definition of
append contains variables representing unknown subexpressions (the
A and
B and
C ). However, in this case the first argument to
cons is incorrect. The first argument to
cons should be
(car l) , as shown in screenshot 1. Alternatively, the first argument to
cons could be an incomplete expression containing a variable representating an unknown subexpression, such as
(car ,B) from screenshot 6, provided that this incomplete expression is consistent with the expression
(car l) . Here, however, the first argument to
cons is the expression
(cdr l) . The red text for tests 2 and 3 indicate that these tests are incompatible with the partial definition of
append in the
Scheme Definition edit pane. That is, there are no legal miniScheme expressions that could be substituted for the variables
B , and
C that would make tests 2 and 3 pass.
The spinning progress indicator to the upper-right of the
Best Guess pane indicates that Barliman is trying to find expressions for variables
B , and
C that will make all of the tests pass. Of course this is impossible -- Barliman should be a little smarter, and cut off the
Best Guess computation when one of the individual tests fails.
The important thing about this example is that Barliman was able to prove that the partial definition of
append is incorrect, without
append being fully defined. More precisely, the partial definition of append is inconsistent with respect to tests 1 through 3 and the semantics of miniScheme (which can be edited by the programmer).
screenshot 7:
Screenshot 8 shows another partially-instantiated, but incorrect, definition of
append . The base case of
append should be
s instead of
l , yet all the text is in black, indicating that the individual tests are compatible with the definition so far. The problem is that we don't have a test that exposes that this partial definition is wrong. We'll fix this in the next screenshot.
This is one danger of using tests for feedback, of course -- in general, no finite number of tests is sufficient to prove our definition is correct. I hope that future versions of Barliman will include other ways to specify the behavior of programs, which might include specifying program properties, or providing a "reference" implementation of a function that is being redefined to perform faster, etc.
screenshot 8:
In screenshot 9 we add a new test, test 4, that shows that the base case of
append is incorrect. Sure enough, test 4's text immediately turns red, indicating it is incompatible with our partial definition.
screenshot 9:
Screenshot 10 shows a limitation of Barliman's program synthesis. Here the partially-specified definition of
append contains only a single variable,
A , representing an unknown subexpression. Ideally Barliman would quickly figure out that
A should be the expression
(cdr l) . However, for this example Barliman seems to get "stuck" -- we can see the spinning progress indicators to the upper-right of the
Best Guess pane and the
Test 2 and
Test 3 edit fields, indicating that Barliman is still "thinking". I let Barliman run for a minute or two, but it didn't find a value for
A in that time. (Adding the notion of "parsimony" to Barliman, so it tries to generate the smallest terms first, might help with this example.)
We could allow Barliman to keep thinking -- perhaps it would find the answer in five minutes, or in an hour (provided our computer has enough RAM!). However, in practice we would probably try filling in
A manually. If we were to type
(cdr ,B) in place of
,A , Barliman would immedialy guess in the correct, trivial subexpression
l for the variable
This example shows how program synthesis in Barliman can be much slower than we might hope in certain cases. However, since Barliman is a text editor, and since multicore computers with lots of RAM are now ubiquitous, I see these examples from a "glass half full" perspective. Sometimes Barliman can help you, either by guessing the rest of your incomplete definition, or by proving that there is no completion for your partially-specified definition that is consistent with your tests. In this case you win. Sometimes Barliman can't help you, in which case you use it like a regular text editor. In this case you use more CPU cyles and RAM on your machine, but otherwise edit text normally.
Of course, Barliman isn't currently a particularly good text editor, especially compared to Emacs with paredit mode, to take one example. This problem is only a matter of engineering -- in fact, Barliman-like functionality could be added to Emacs, or to another editor. Or Barliman could get more sophisticated editing abilities.
A bigger drawback is that the semantics for the language you are writing in must be specified in miniKanren. This is fine if you are writing in a minimal Scheme subset, such as miniScheme. This isn't so great if you want to program in full Clojure or Racket or Javascript or Ruby. Finding ways to scale this technology is an open problem. The solution may not be miniKanren or constraint logic programming, but rather another synthesis approach. I don't know. I do hope, however, that Barliman will make people think about how synthesis capabilities can be integrated into editors, especially for dynamic languages.
screenshot 10:
Update: Here are a few newer screenshots, as of June 16, 2016, that show off the relational parser for miniScheme that I added a couple of days ago.
Screenshot 11 is an updated version of screenshot 5, showing the new relational parser at work. The definition of
append is syntactically incorrect, which is represented by the purple text in the
Scheme Definition edit pane. The tests are syntactically correct, but fail, and are therefore shown in red text.
screenshot 11:
Screenshot 12, like screenshot 11, shows a syntactically incorrect definition of
append . In this case the keyword
lambda appears as the body of a
lambda expression. In miniScheme, as in Scheme,
lambda is a special form rather than a function; the keyword
lambda cannot appear "by itself". Hence the purple text in the
Scheme Definition edit pane.
Once again, the tests are syntactically valid, but fail, and so are shown in red text.
screenshot 12:
Screenshot 13 is identical to screenshot 12, except that the formal parameter to the
lambda expression in the
Scheme Definition edit pane has been changed from
x to
lambda . This formal parameter shadows the
lambda keyword, allowing
lambda to appear by itself in the body of the
lambda expression.
Once again, the tests are syntactically valid, but fail, and so are shown in red text.
This example shows that the relational parser keeps track of the environment, variable scope, and shadowing.
screenshot 13:
Screenshot 14 shows a syntactically legal partial definition of
append in the
Scheme Definition edit pane. Three of the tests are syntactically legal, and are (individually) consistent with the partial definition of
append ; therefore, the text for these tests are shown in black.
The third test, however, is syntactically incorrect. This is because in miniScheme, as in Scheme,
and is a special form rather than a function, and therefore cannot be passed into the call to
append . Since the third test is syntactically illegal, it is shown in purple text.
screenshot 14:
Advantages and limitations of Barliman
Advantages of Barliman
Barliman is flexible . Barliman can handle operational semantics for various programming languges. Users can add their own semantics, or modify the semantics for languages that are included with Barliman. Barliman does not require the language be statically typed, or that the user has supplied enough tests to fully synthesize the function being defined.
Barliman is interactive . Any change to the definition of a function, the corresponding tests, or even the semantics immediately re-triggers the program synthesis solver.
Limitations of Barliman
Barliman can be extremely slow when it comes to program synthesis, and can easily get "stuck", possibly taking hours and tens of gigabytes of RAM to synthesize small fragments of code. Since the default "miniScheme" language is dynamically typed, Barliman cannot take advantage of types to limit the space of programs to be considered during synthesis. There are other synthesis tools that can synthesize the complete definition of
append , for example, given
append 's type signature along with tests that properly cover the behavior of
append . (In fact, Michael Ballantyne has been able to synthesize
append by integrating types into a tiny Scheme-like languge, which I'd like to explore in the context of Barliman.)
In short, Barliman is flexible, and can handle Turing-complete dynamically-typed higer-order languages, and under-specified synthesis problems, but the tradeoff is that Barliman's synthesis is slow.
Barliman works best for big-step operational semantics. It is possible to implement small-step semantics in Barliman. However, the synthesis features of Barliman are likely to work poorly compared with semantics written in a big-step style.
Similarly, Barliman works best for side-effect-free languages, such as a pure subset of Scheme. Once again, Barliman can handle languages with side effects, such as variable mutation. However, Barliman's synthesis abilities are likely to suffer as a result.
I do not know how large a language, or how large a definition, Barliman can handle in practice. I will be experimenting with this...
Barliman can be resource hungry. Given six example programs and a definition, Barliman will launch eight instances of Chez Scheme, all running in parallel. Barliman tries to kill these processes when they are not needed, but it is possible for these processes to run for long periods of time (like, forever) and take up unbounded amounts of RAM.
Barliman currently isn't a very good at standard text editing. For example, anyone used to paredit or structured text editing will miss those features in Barliman, at least for now. I do want to add these features to Barliman, especially since I expect they will make the synthesis aspects easier to explore.
Barliman currently doesn't support saving or loading files, definitions, tests, or anything else. I plan to add this feature soon.
Barliman is changing quickly, and definitely contains errors and interface quirks. To the best of my knowledge none of these problems are inherent in the design of Barliman, or the technology being used for synthesis. Still, since this is a rapidly evolving prototype, I expect I will be introducing errors about as quickly as I remove them, at least for a while.
How Barliman works
Barliman uses miniKanren ( http://minikanren.org/ ), and a relational Scheme interpreter written in miniKanren (Byrd, Holk, and Friedman, 2012, http://dl.acm.org/citation.cfm?id=2661105 or http://webyrd.net/quines/quines.pdf ), to provide real-time feedback to the code editor using program synthesis.
Chez Scheme in turn uses the miniKanren implementation and relational interpreter implementation contained in the
mk-and-rel-interp directory.
The default "miniScheme" language
(give grammar and semantics for the default language)
As in Scheme, in miniScheme duplicate variable names of definitions at the same scoping level, or duplicate
lambda or
letrec bindings, are illegal. However, Barliman does not currently detect these violations. For example, Barliman will not complain about the expression
((lambda (x x) x) 3 4) , the behavior of which is unspecified. Probably the parser should enforce that the variable names are distinct.
lambda and
letrec forms do not contain an implicit
begin .
lambda form supports multiple arguments,
(lambda (x y z) y) , and a single "variadic" argument,
(lambda x x) , but currently doesn't support the full Scheme variadic syntax,
(lambda (x y . z) x) .
Barliman implementation details
The cocoa version of the editor is written in Swift, and has been tested under OS X 10.11.4 and XCode 7.3.1. Eventually the editor will be crossplatform. I'm starting with cocoa since I'm developing on a Mac, and I want to make sure I don't box myself into a corner with the user interface/performance as I experiment with the design and the interface. The cocoa version of Barliman calls out to Chez Scheme ( https://github.com/cisco/ChezScheme ), which must be installed separately, and which is assumed to reside in
/usr/local/bin/scheme .
IMPORTANT: The cocoa version of Barliman does its best to clean up the Scheme processes it launches. However, it is wise to run
top -o cpu from the terminal after playing with Barliman, to make sure errant Scheme processes aren't running in the background. If these tasks are running, you can kill them using
kill -9 <pid> , where
<pid> is the process identifier listed from the
top command.
To use the cocoa version of Barliman, first build and launch the application from XCode. The application currently has a single window, with a single editable pane. Enter Scheme expressions that run in the relational Scheme interpreter, such as:
((lambda (x) x) 5)
Each time the text changes, a Chez Scheme process will be launched, attempting to evaluate the expression in the relational Scheme interpreter. If the expression is not a valid Scheme s-expression, Chez will complain, an Baliman will display the code in red. If the expression is a legal s-expression, and the corresponding miniKanren query to the relational interpeter succeeds, the value of the query will be displayed below the editable text box. If the query fails, the empty list will be displayed in the text box.
For more interesting answers, you can use the logic variables A through G, upper-case. Make sure to unquote the logic variables:
((lambda (x) ,A) ,B)
Acknowledgements and thanks
Thanks to Michael Ballantyne, Kenichi Asai, Alan Borning, Nada Amin, Guannan Wei, Pierce Darragh, Alex Warth, Michael Adams, Tim Johnson, Evan Czaplicki, Stephanie Weirich, Molly Feldman, Joe Osborn, Nehal Patel, Andrea Magnorsky, Reid McKenzie, Emina Torlak, Chas Emerick, Martin Clausen, Devon Zuegel, Daniel Selifonov, Greg Rosenblatt, Michael Nielsen, David Kahn, Brian Mastenbrook, Orchid Hybrid, Rob Zinkov, Margaret Staples, Ziyao Wei, Matt Hammer, Hunter Hutchinson, Bryan Joseph, Cesar Marinho, Michael Bernstein, Bodil Stokke, Dan Friedman, Ron Garcia, Rich Hickey, Phil Wadler, Tom Gilray, Dakota Fisher, Gavin Whelan, Devon Zeugel, Matt Might, participants of my 2016 PEPM tutorial on miniKanren, and particants of the 'As We May Thunk' group ( http://webyrd.net/thunk.html ), for suggestions, encouragement, and inspiration.
Thanks to Kent Dybvig, Andy Keep, and Cisco Systems for releasing Chez Scheme under an open source license.
The definition of
letrec in the main interpreter is based based on Dan Friedman's code, using the "half-closure" approach from Reynold's definitional interpreters.
Greg Rosenblatt has been improving the search and the miniScheme interpreter to improve synthesis performance, greatly improving performance on many of the synthesis problems.
Barliman is intended to be an improved version of the very crude 'miniKanren playground' I showed at my 2016 PEPM tutorial on miniKanren: https://github.com/webyrd/minikanren-playground
Barliman TODOs and limitations
- Devon Zeugel suggests using a monospace font, and perhaps swapping the tests and the definitions in the main window. Devon suggests using the number of tests that pass to guide search for auto-repair or other synthesis. Or, to try to maximize the number of tests that pass, then have the user take over. Maybe use the number of tests that pass as a score/heuristic for stochastic search.
- Tom Gilray suggests being able to hover over a ,A logic variable to select/approve a suggested/guessed value for that particular subexpression. Michael Ballantyne and other people have suggested similar notions, including a scrubber for scrubbing over/selecting a generated/guessed value for a subexpression.
- replace test input/output edit fields with multi-line edit capabilities similar to that of the 'Definitions' pane
- add paren hilighting to editor
- add "smart delete" of parens
- add add auto-indent
- add forward/backward s-expression
- add transpose s-expression
- add pretty printing of "Best Guess" definitions
- add smart editing/auto insert of gensyms in the test edit panes, similar to how smart editing/auto insert of logic variables works in the Definitions edit pane
- for 'syntax error' and 'illegal sexpression' messages for a test, potentially show whether the input, the output, or both is the problem (could be complicated in that the output might be an illegal sexpression, while the input is a syntax error, for example)
- have Barliman attempt to guess the result of a test, as the programmer types in the test (thanks Ziyao Wei!)
- show the definition guessed for each individual successful test
- show reified test inputs and outputs upon success, for all tests (would allow queries like 'quines')
- mouse hover over ,A variable should display the variable's "Best Guess" value
- allow resizing of Barliman main window
- add
- add better error message for 'invalid syntax', at least indicating whether there is an unexpected paren/missing end paren
- Possibly replace 'list' call in the "best quess" query with nested 'cons' calls instead. (Need to time this again with Greg's new improvements to the search.) This can be an order of magnitude faster in some cases, according to my testing (variadic application is more expensive than 'cons' in the current miniScheme interpreter, apparently: see times for append-gensym-synthesis-with-cons-1 versus append-gensym-synthesis-with-list-1 tests in test-interp.scm).
- add an implicit
letrec, and
- parser should enforce that the variable names are distinct in
letrecbindings and formals, and
define's within the same scope.
- create a version of Barliman on an open platform (Electron, Clojurescript, Lighttable, whatever). Any help would be appreciated! :)
- consider using ulimit or some other capability for keeping the running Scheme processes under control/keep them from using all the RAM and CPU cycles
- consider adding fields for seeing the ground results of partially-instantiated test inputs/outputs
- add full variadic syntax:
(lambda (x y . z) x)
- consider turning the background of the "guess" pane green, or otherwise indicting the user, when a guess can be made. Could also potentially change the code in the main definition edit pane, although this may not be friendly.
- add STLC as an example, complete with type inferencer
- perhaps be able to drag and drop subexpressions from the best guess pane onto variables in the definition pane. And also be able to replace an extort subexpression in the definition pane with a logic variable.
- think about contextual menus/right click and also drag and shift-drag. What should these do?
- make sure Semantics and the main Barliman windows can be reopened if the user closes them! Currently there doesn't seem to be a way to get the window back. Perhaps allow the user to hide the windows, but not close them? What is the preferred Mac way?
- for the case in which a simple function is being used to generate test inputs and answers for a more complex version of the same function, may need or want a grounder to make sure answers are fully ground. May also want a grounder for code, esp for the best guess pane. Although grounding code may not be necessary or ideal.
- would be smart to only re-run Scheme processes when the Scheme code actually changes -- for example, white space characters outside of an S-expr shouldn't trigger re-evaluation. One way would be to compare "before" and "after" S-exprs to see if anything has changed. Could run a single Scheme instance and call
equal?to see if the code has actually changed. This could be a big win for expensive computations.
- add ability to save and load examples/tests/semantics, and include interesting examples, such as a tiny Scheme interpreter written in Scheme, state machine using mutual recursion, examples from pearls, etc.
- add structured editor for semantics and for type inferencer (as an alternative to/in addition to the free-form editor)
- possibly move as much work as possible into NSTasks, such as loading files.
- possibly add pairs of tests as processes, once individual tests complete successfully
- add syntax-directed auto-indentation of code
- figure out how to do syntax-directed hilighlighting, and precise hilighting of syntax errors. May not be as important if I go the structured editor route. Although perhaps this should be an option, either way.
- add documentation/tutorial
- add paper prototype for desired features
- move 'barliman-query.scm' temporary file to a more suitable location than 'Documents' directory, or get rid of the temp file entirely
- experiment with store passing style and small step interpreters
- get rid of hardcoded path to Chez executable
- add input/output examples
- find a cleaner and more flexible way to construct the program sent to Chez
- add "accept suggested completion" button
- would be smarter/less resource intense to not launch all the tests again when the text in a single test changes. Only that test and allTests need be re-run, in theory. Getting the UI to display the state of everything properly may be a little subtle, though.
- differential relational interpreters
- use a meta-interpreter to let the programmer know the deepest part of the search path upon failure, to try to give a better hint as to what went wrong (thanks Nada! and halp! :))
- Devon Zeugel suggested looking at Mutant ( https://github.com/mbj/mutant ).
- mousing over a failing test should highlight subexpressions in the Definitions pane that are incompatible with that test.
- mousing over a subexpression should hilight any tests which would be incompatible with the definitions, were a logic variable to be substututed for the expression being moused over. (perhaps do this only if a modifier key is help down)
- improve editor so that typing '(' 'cons' auto completes to '(cons ,A ,B)', based on arity of cons (unless cons is shadowed).
- consider placing each of the 'definition' forms in its own edit window, with 'uses mutattion', 'uses call/cc', 'well-typed' checkboxes for each definition (inspired by Kenichi Asai's tool for teaching functional programming).
- try adding contracts/properties/specs. For example, for
append, could add the property that the sum of
(length l)and
(length s)must be equal to
(length (append l s)). This could work with randomized testing, even for partially-instantiated definitions. In the case of
length, would either need to use Oleg numbers, or CLP(FD).
- related to properties, might want generators, such as a
losothat generates flat lists of symbols, for example, or
lovo, that generates flat lists of values, or
treevo, that generates trees of values. Could use these generators for specifying and testing properties. One simple, "type" property is that
appendshould work on any two
lovos, and, in this case, return of
lovo. Could extend this to talk about the lengths of the
lovos, etc. Could then either enumerate or randomly generate
lovos QuickCheck style to try to find counter-examples with respect to the current partial (or complete) definition, or perhaps to help with synthesizing the actual code.
- automatic test generation/fuzzing
- add arithmetic to the main interpreter
- explore incremental computing with the editor
- add type inferencer
- test generation of typed test programs
- partial evaluation of the interpreter to speed up evaluation
- add support for macros
- explore predicates/generators/QuickCheck-like functionality
- explore other synthesis techniques, model checking, etc., as alternatives or additions to the miniKanren-based program synthesis in Barliman
- add tree automata support to support grammars
- add abstract interpretation for miniKanren to speed up the synthesis
use stochastic/probabilistic extensions to miniKanren to improve synthesis capabilities. For example, see:
Eric Schkufza, Rahul Sharma, and Alex Aiken. 2013. Stochastic superoptimization. In Proceedings of the eighteenth international conference on Architectural support for programming languages and operating systems (ASPLOS '13). ACM, New York, NY, USA, 305-316. DOI= http://dx.doi.org/10.1145/2451116.2451150 https://cs.stanford.edu/people/sharmar/pubs/asplos291-schkufza.pdf
write simple implementation of a function, generate test from that function, then use those tests to guide the more sophisticated implementation. Or more generally, continually test the partially-implemented function vs the fully implemented but perhaps less efficient function.
Matt Might suggests as a use case, "automatic program repair after bug discovery," and points to work by Stephanie Forrest. I really like this idea. Here's how the use case might work:
You write tests and code. The tests pass. Later you find an error in the code, so you go back and add more tests, which fail.
Click a Barliman 'auto-repair' button. Barliman tries, in parallel, removing each subexpression and trying synthesis to fill in the rest.
If Barliman could use a Amazon server with dozens of hardware cores and 2TB RAM (like the new X1 server on AWS), this really could be done in parallel.
Or run locally until there's a timeout, then run again with the holes in other places. Could even try pairs of holes to keep the synthesis problem as small as possible.
Or, perhaps more practical short term until Barliman's synthesis improves...
Have Barliman try removing each subexpression and then check if any of the tests still fail. Then hilight these known bad subexpressions to help guide the user.
Greg Rosenblatt's suggestion for auto-repair: "The user may also want to mark some regions of the code as suspect, which would prioritize the area searched for problematic sub-expressions. If the user is right, the fix could be found much sooner."
- could just call out to Scheme one the program becomes grounded. However, the semantics and even the grammar may not match that of the interpreter used by miniKanren, so this seems difficult or impossible to do properly. However, could call a (non-relational) interpreter for miniScheme.
- Tom Gilray suggests changing the interface to just have a single editor window, which allows for definitions and for test calls/results. I suspect this is the right way to go, although it will involve significant changes to Barliman. Tom also suggests having arrows to the right of each logic variable, showing the current value of each variable.
- perhaps use delayed goals to implement arithmetic over floating point numbers, and other tricky operations. If the arguments do not become instantiated enough, Barliman should be non-commital (can't synthesize code, and can't prove tests are not consistent with the code until the code is more instantiated).
- Greg Ronsenblatt suggests dividing tests into a 'training' set and a 'test' set, as is done in machine learning to avoid overfitting. Of course this could also lead into 'propety-based testing', generators, etc.
- Non-specific error indication (the color changes for the text, but does not show which part of the text caused the error)
- Currently the UI only supports 6 tests. Should allow more tests to be added.
- Test inputs and outputs are
NSTextFields rather than
NSTextViews, which makes writing longer and more complicated tests awkward.
- The '0' key no longer seems to work.
- Shadowing of syntax is no longer working. (and and #t) => #t should result in a syntax error, unless the Definitions pane contains a defn named 'and': (define and (lambda x x)). In which case, (and and #t) should be legal syntax. (Wonder if we broke this when we messed with the environment in evalo.)
- It is possible, rarely, to exit Barliman and still have a Scheme process running in the background. Need a way to better track which processes have been started and make sure to kill them. Or potentially use something like
ulimitwhen launching a process.
- auto-insert of right parens and auto-insert of logic variables breaks 'undo'. Guess I need to learn how 'undo' works in Cocoa...
- The miniKanren queries constructed by Barliman expose several local variable names and a number of global variable names that could accidentally or intentionally be used by the programmer. Need to tighten this up.
- An illegal s-expression in the 'Definitions' edit pane will make test input/output expressions that are legal expressions appear to be illegal.
- closing one of the windows means the window cannot be reopened! Oops. I'm not going to worry about this until I decide what to do with the Semantics window.
- sometimes the spinners stop spinning but are still visible
DONE (features on the TODO list implemented since the original release of Barliman)
- changed reifier and main edit window to display constraints separately from "best guess" definition(s).
- fixed: quickly tab-deleting a test with a syntax error (for example) can leave the 'syntax error message' on an empty test
- added automatic addition of right parens, and auto-addition of logic variables (thanks Michael Ballantyne, Guannan Wei, Pierce Darragh, Michael Adams, for discussions on how this might work)
- changed reifier so that constraints involving gensym are not displayed.
- Fixed error: even if the "best guess" query terminates with success, individual test processes may still keep running, since those tests don't "know" that the best guess involving all the tests has succeed. If the best guess query terminates with success, the individual test processes should be killed, and marked as successful (black text, stop the progress spinner).
- updated
letrecto allow for zero or more bindings, and updated
beginto allow for zero or more definitions; this allows the creation of mutually-recursive functions.
- define grammar for microScheme (and the other languages) as a miniKanren relation, and use this grammar to separately check and report whether the definition is grammatically correct.
- cancel the allTests operation if any single test fails, since in that case allTests cannot possibly succeed
- wait part of a second to see if there are more keystrokes before launching Scheme processes. Sort of like XCode (I assume XCode is doing this). Would be more resource friendly, less distracting, and would make typing quickly more responsive. Could probably do this using an timer.
- add ability to change the evaluator rules and perhaps an explicit grammar as well


text:
Chicken and waffles is one of my guilty pleasures. The first time I tried this sweet and savory dish was during a trip to Atlanta back in 2004. I was at a jazz club and while browsing their late night menu, their chicken and waffle dish caught my eye. I just had to order it and that was the night I fell in love with this sweet and savory combination.
With the Super Bowl upon us, I wanted to share an easy appetizer that you can put together in minutes.… Read the rest


text: Seoul says the country is on its highest non-wartime alert and F16 fighter jets have been scrambled to the location. At least South Korean 14 soldiers were reportedly hurt, including four seriously, and around 60 to 70 houses were ablaze after the shelling. The rounds landed on Yeonpyeong island and also went into the sea near the countries' disputed western border. South Korea says its troops then returned fire. South Korean President Lee Myung-bak has held an emergency meeting following the incident. He said he was trying to prevent the exchange of artillery fire from escalating into a greater conflict. YTN television reported that Seoul had warned of a stronger response if the North continued with provocations. China has expressed concern over the exchange of fire and urged the two sides to work toward peace and stability on the Korean peninsula. Between 1,200 and 1,300 people reportedly live on the island. TV pictures showed smoke rising from the location. Sky's Holly Williams said: "We do see skirmishes from time to time in the Yellow Sea, which lies off the western coast of the Korea peninsula, but this is different. "Civilians are involved. It is bigger in scale than the skirmishes we normally see." She added: "Normally when this sort of aggression takes place started by the North we tend to assume it is something to do with dictator Kim Jong-il's own position domestically. "Perhaps he is having to shore up his own position. We know he has been ill in recent years and perhaps also weakened politically. There will be speculation this is more of the same." South Korea Says North Korea Fired Artillery Onto An Island And Into The Sea | World News | Sky News


text:
More and more people now have a Cherished Number Plates on their car. Over the past 12 years the country seems to have fallen in love with Cherished Number Plates. There is hardly a street in the UK that doesn't have at least one car with a Cherished Number Plates on it. Why not revive your car and make a sound investment in something that makes you smile every time you see your vehicle in the UK.
Plates2Cherish is a UK based business offering quality Cherished Number Plates - Car Cherished Number Plates at Realistic Prices to you in the UK!
Please bookmark our Cherished Number Plates website www.plates2cherish.co.uk and check back regularly for a Cherished Number Plates you can enjoy for life in the UK, or complete our Cherished Number Plates enquiry form and we will keep your request on file to compare with new Cherished Number Plates offerings as they become available.
If you have a Cherished Number Plates in mind, please email us with you preference and we will endeavour to find a good match for what you are looking for. Feel free to contact us in the UK. TODAY on 07527 62 32 47
Prices do fluctuate depending on market conditions availability etc
Please note GOVT transfer fees are £80.00 extra and a 2.5% charge on credit cards, but not on debit cards.
Order your cherished number plate from Plates2Cherish and be one of the lucky people to drive an "11" personalised number plate on your car in your town.
Please enter your details below and click the Submit button and we will RING YOU BACK at our expense as soon as possible.
Please find below a website you can use to get your number plates made. If you want to know what the number plate would look like LEGALLY, then remove our example 'cherished number' and replace with your cherished number plate registration, then choose the style and type and the final legal appearance will appear below.


text:
The South West's Accountancy Recruitment Specialists
2 in every 4 applicants shortlisted by us are interviewed.
85% of those interviewed are offered a position.
Lloyd Barnes Accountancy Recruitment was established in 2004. Our aim is to provide a professional, personal and cost effective recruitment service. We have a team of consultants with over 23 year's accountancy recruitment experience gained in the Devon, Cornwall and Somerset business markets. What makes us different?
Our consultants have a background in finance, and therefore add value to the recruitment processes due to a greater understanding of client's requirements and candidates skills. We build long term partnerships with local businesses, and whilst we focus on maintaining our professional reputation we also offer competitive fee structures for both standard and exclusive recruitment campaigns.


text:
GBP/USD: technical levels
GBP/USD fell yesterday by about 70 pips to the $1.6620 area. At H4 MACD went below 0. The pair's now targeting $1.6600 and $1.6585 (200-period MA at H4, February 24 low). Note that there are many support levels in the area. The next support is at $1.6635 (50% Fibo), $1.6500 and $1.6470. Resistance is located at $1.6685, $1.6700 and $1.6740.
UK manufacturing production rose by 0.4% (forecast: 0.3%). The Bank of England's Governor Carney started his testimony on inflation and the economic outlook before Parliament's Treasury Committee.
Chart. H4 GBP/USD