text:
How to say SOAP in Norwegian soʊp
Would you like to know how to translate SOAP to Norwegian? This page provides all possible translations of the word SOAP in the Norwegian language.
- såpa, såpeNorwegian
Discuss this SOAP Norwegian translation with the community:
Use the citation below to add this definition to your bibliography:
"SOAP." Definitions.net. STANDS4 LLC, 2017. Web. 25 Mar. 2017. </translate/SOAP/NO>.


text:
Friday, February 22, 2013
You don't have to be an expert bowler to participate in Big Brothers Big Sisters of the Columbia Gorge's largest community fundraiser of the year. All you need is a little "spare" time.
Teams are forming now for Bowl for Kids' Sake 2013, presented by NW Natural and The Dalles Disposal/Hood River Garbage Service, is just around the corner.
More than 250 bowlers are expected to join in the celebration on Saturday, March 9, at Orchard Lanes, raising funds to support more than 80 Littles and their Bigs in local communities served by the agency.
"Each year the Columbia Gorge community rallies to raise funds for the Big Brothers Big Sisters mentoring program. Bowl for Kids' Sake is an awesome opportunity to help local kids reach their full potential," said Kristin Reese, program manager. "The best part is that the entire community gets involved to make a difference for our kids — and it does!"
Teams of five bowlers collect donations and pledges from friends, family, co-workers and others who want to help make a difference for local children. On the day of the event, they bring donations they've collected to Orchard Lanes and celebrate their hard work with bowling, food and prizes.
There are prizes for the team in each round that raises the most money and individuals who raise $100 or more in pledges get a T-shirt.
Currently, BBBS of the Columbia Gorge has 76 boys and girls matched with caring, carefully screened and trained volunteer mentors — but there are 30-plus children waiting for a Big of their own. You can help by forming a team or pledging to a bowler.
The funds raised help support existing matches and enable BBBS to match additional youth in Wasco, Hood River and Klickitat counties with an amazing Big Brother or Big Sister.
You can help by forming a team or pledging to a bowler. The funds raised help support existing matches and enable BBBS to match additional youth in Wasco, Hood River and Klickitat Counties with an amazing Big Brother or Big Sister.
You can support a community team, family member, friend or co-worker through an online donation.
For details contact Kristin Reese at 541-436-0305 or at firstname.lastname@example.com or visit nextdoorinc.org.
More like this story
Latest stories
- Red Cross: Odell house fire Sunday
- Editor's Notebook: Those letters, 'stupid' or not, keep the conversations going
- Letters to the Editor for March 25
- This year's Follies is 'Kid Awesome'
- Parkdale Snow fun
- Scouts from Troop 378 plan to attend National Jamboree
- 'March for Science' April 22 in White Salmon
- 'Living Well' workshop coming to HRVAC May 2 through June 6
- Downtown lawn prepared for Yasui Legacy Stone
- Cell tower dispute back before county
Latest video:
Parkdale third graders sing "12 Disaster Days of Christmas"
Welcome to your sing-able Christmas gift list. What follows is an emergency rendition of "12 Days of Christmas" – for outfitting your home or car in case of snow storm, earthquake, flood or other emergency. Read it as a simple list, or sing it to the tune of "12 Days" – you know, as in " … and a partridge in a pear tree…" Not to make light of it, but the song is a familiar framework for a set of gift ideas that you could consider gathering together, even if the recipient already owns items such as a bunch of coats, tire chains and flashlights. Stores throughout the Gorge are stocked up on all these items. Buying all 12 days might be prohibitive, but here are three ideas for checking any of the dozen off your list (notations follow, 1-12.) The gift items needed to stay warm, dry and safe are also coded to suggest items in your abode (A) in your car (C) or both (B). 12 Gallons of Water (A) 11 Family meals (B) 10 Cans of propane (A) 9 Hygiene bags (B) 8 Packs of batteries (A) 7 Spare coats (B) 6 Bright red flares (C) 5 Cozy blankets (B) 4 Tire chains (C) 3 Flashlights (B) 2 cell phone chargers (B) 1 And a crush-proof first aid kit (B) Price ranges? Here's a few quotes for days Three, Two, Four and Nine: n A family gift of flashlights (three will run $15-30, Hood River Supply, Tum-A-Lum) n Cell phone chargers (two will run $30-60) n Tire chains (basic set, $30, Les Schwab, returnable if unused for the winter) n Family meals ($100 or so should cover the basics for three or four reasonably well-fed days) n The home kit should be kept in a handy place near an exit, and remember that water needs to be replenished every few months. If you have a solid first aid kit already, switch out the gift idea with "and-a-sto-o-u-t- tub-for it-all …" Otherwise, it's a case of assembling your home or car kits and making sure all members of the family know what the resources are and how to use them (ie flares and propane). Emergency situations are at worst life-threatening, at best deeply uncomfortable if you and your family are left without power for an extended period, or traveling and find yourself in a situation where you need to wait out a storm, lengthy traffic delay, or other crisis. Notes on the 12 gift ideas: 12 – Gallons of water: that's one per person in a four-member family to last for three days, the recommended minimum to be prepared for utility outages. 11 – Easy-open packaged goods, energy bars, dried food and nuts are good things to include for nutrition. Think of what your family of four needs for three days to stay fortified and hydrated (see number 12). Can-opener also recommended 10 – If you have a propane camping stove, keep extra fuel handy. 9 – Hygiene bags: put packaged moistened towelettes, toilet paper, and plastic ties in large garbage bags (for personal sanitation) Resource list courtesy of Hood River County Emergency Management, Barbara Ayers, manager/ 541-386-1213. The county also reminds residents to Get a Kit, Make A Plan to connect your family if separated, and Stay Informed. See www.co.hood-river.or.us to opt-in for citizen alerts. Enlarge

subset: commoncrawl


text:
This is a video review of the Kamen Rider Wizard figure that arrived recently in the S.H. FiguArts toy line. S.H. FiguArts Kamen Rider Wizard Flame Style represents Haruto Souma's transformed form in the series. Check out the video after the jump.
S.H. FiguArts Kamen Rider Wizard Flame Style stands 150mm tall and comes with various accessories, weapons, the WizarSwordGun (Gun and Sword Modes), and replacement wrists. A Tamashii Stage is also included. S.H. FiguArts Kamen Rider Wizard Flame Style cost 3675 yen, or about US$41.
All images and videos here are property of their respective owners and used for reference purpose only. We claim no rights to it unless otherwise stated.
Subscribe to:
Post Comments


text:
Mercedes-Benz 300SL for Sale
1984 Mercedes-Benz 300SL Conv
Staunton, IL
1984 Mercedes 380SL Conv, hard top and soft top, good body and paint, orig int, v8, auto, runs and drives good... More
1991 Mercedes-Benz 300SL Two Tops
Stratford, NJ
Just arrived look at this beauty outstanding in and out!!!!!LOOK LIKE A MILLION FOR A FRACTION OF THE COST.........Two Tops, just installed New Convertible... More
1955 Mercedes-Benz 300SL Gullwing
Essen, Germany
Mercedes-Benz returned to post-war competition in 1952, fielding two of its new 300 SL (W194) sports cars in the Mille Miglia. The pair finishing... More
1957 Mercedes-Benz 300SL Gullwing
San Diego, CA
Commission Number 856 345 Delivery Number 11344 Chassis Number ... More
1955 Mercedes-Benz 300SL Gullwing Replica
Indianapolis, IN
Custom build completed by Speedster Motorcars - 5.3L GM Vortec overhead valve fuel injected engine- 4L60E automatic transmission- 4-wheel independent suspension- Coilover shocks- Control... More
1962 Mercedes-Benz 300SL Roadster
Waltham, MA
A 1962 Mercedes Benz 300SL finished in Mercedes Benz (050) White, over a Black interior, carpets, and Black soft top. This is a 3... More
1957 Mercedes-Benz 300SL Roadster
Astoria, NY
1957 Mercedes-Benz 300SL Roadster: Born in Rare Factory Black This 1957 Mercedes-Benz 300SL Roadster was originally born in extremely rare and desirable factory black and is a matching numbers... More
1991 Mercedes-Benz 300SL
Fort Lauderdale, Florida
1991 Mercedes-Benz 300SL To be OFFERED AT AUCTION WITHOUT RESERVE at Auctions America's Fort Lauderdale event, March 31-2, 2017.Chassis No.WDBFA61E3MF018126Estimate:$ 10,000 - $ 15,000... More
1963 Mercedes-Benz 300SL Roadster
Fort Lauderdale, Florida
1963 Mercedes-Benz 300SL Roadster To be OFFERED AT AUCTION at Auctions America's Fort Lauderdale event, March 31-2, 2017.Chassis No.19804210002994Estimate:$1,250,000 - $1,500,000 USAt the... More
1959 Mercedes-Benz 300SL Roadster Convertible
unknown, United kingdom
Arriving soon - Mercedes-Benz 300 SL Roadster.Supplied new to Milan, Italy in 1959. The SL remained with its first owner until 1994.The second owner... More
1955 Mercedes-Benz 300SL Gullwing
Miami, FL
*1955 Mercedes 300 SL Gullwing* This excepcional example has benefited from a comprehensive professional restoration by Marc Pastorelli. This job was made with a open... More
1957 Mercedes-Benz 300SL Roadster
Emeryville, CA
1957 Mercedes-Benz 300SL Roadster s/n 198.042.7500568 Fire Engine Red with Tan Leather Interior The 300SL was one of the most exotic cars available when it was new.... More
1955 Mercedes-Benz 300SL Gullwing factory Rudge wheel
Astoria, NY
This 1955 Mercedes-Benz 300SL Gullwing is a factory Rudge wheel example that was born in DB157 Beige. It currently wears aging but still very... More
1957 Mercedes-Benz 300SL
Astoria, NY
1957 Mercedes 300SL roadster. Red with black leather interior. Originally born with very desirable color Blue Grey and black leather. It's been a California car... More
1991 Mercedes-Benz 300SL
Tucson, AZ
ENGINE ...2.8L 228 HORSEPOWER WHEELBASE....99.IN TRANS...............4 SPEED 4G-TRONIC BODY STYLE.............ROADSTER PRICE TAG (NEW) ........78,500.00 THIS 1991 300SL IS A SIMPLY FANTASTIC CAR WITH THE... More


text:
Zauvijek volim te
"Zauvijek volim te" | |
Eurovision Song Contest 2008 entry | |
Country | |
Artist(s) | |
Language | |
Composer(s) | |
Lyricist(s) |
Vladimir Dojčinovski
Finals performance | |
Semi-final result |
Semi-final points |
Appearance chronology | |
◄ "'Ajde, kroči" (2007) | |
"Just Get Out of My Life" (2009) ► |
"Zauvijek volim te" (Cyrillic: Заувијек волим те, English translation: "I Love You Forever") is a song performed by Stefan Filipović, and was the Montenegrin entry for the Eurovision Song Contest 2008. It was performed first in the first semi-final on May 20, 2008 but failed to make it to the final. It got 23 points in total (12 from Bosnia and Herzegovina, 10 from Slovenia and 1 point from San Marino), which was enough only for a 14th place.The 10 and 12 points given make this song the best Montenegrin entry so far.
The song was composed by a team of authors from Macedonia: Grigor Koprov (music), Ognen Nedelkovski (lyrics) and Vladimir Dojčinovski (arrangement) - the same team that created Karolina's song "Mojot svet"; the Macedonian entry at the Eurovision Song Contest 2007. It was later rearranged by Marko Kon and Aleksandar Kobac, famous Serbian arrangers. Two of the 4 backing vocalists are the same ones that sang back vocals for the Croatian song in 2003 and Slovenian song in 2007 - Amira Hidić and Martina Majerle. The other two are called Ana Kabalin and Mateja Majerle.
It's a love song written in a pop-rock style. Stefan sings to his lover, asking her to "be his again" because he "loves her for eternity". An English version of the song was released under the title "Never Forget I Love You". The demo versions of the song were presented on March 8, 2008, on a RTCG live show, while the rearranged version was released on March 17. Promotional videos were made for both versions of the song. They were filmed on various locations such as the Old Town of Kotor and Budva.
The song was succeeded as Montenegrin representative at the 2009 Contest by Andrea Demirović with "Just Get Out of My Life".[1][2]
Track listing[edit]
- Zauvijek volim te (Eurovision Version)
- Never Forget I Love You (English Version)
- Zauvijek volim te (Karaoke Version)
See also[edit]
- ^ Klier, Marcus (2009-01-23). "Montenegro: Andrea Demirovic to Eurovision". ESCToday. Retrieved 2009-01-23.
- ^ van Tongeren, Mario (2009-01-23). "Montenegro: Andrea Demirovic to Moscow!". Oikotimes. Retrieved 2009-01-23.


text:
***Disclosure: I received complimentary samples and a promotional item to facilitate my post. No other compensation was provided, and all opinions are 100% honest and have not been influenced in any way.***
Of course we want to make the most of what little summer is left, so we decided to have a little impromptu party for the kids. We didn't do anything too fancy. We just picked up some WONKA™ Peel-A-Pops, some "Wonkafied" treats I made, and headed for the deck. You know. Because I am not crazy enough to give my preschoolers anything gooey and melty indoors if I can help it!
I quickly prepared a platter with fresh fruit and WONKA™ Peel-A-Pops and headed out to the deck. Of course all the fighting ceased, and I was soon followed by 3 very curious children. They immediately started begging for a popsicle. I HAD to have fun with them a bit, and told them there were no popsicles in the house. After all, these treats are Wonka Peel-A-Pops, not popsicles!
After seeing the sheer confusion on their faces, I told them all about WONKA™ Peel-A-Pops and how these frozen treats are anything but ordinary. The kids quickly grabbed their Peel-A-Pops, and had so much fun peeling them away to reveal the ice cream inside. My 3 and 4 year olds didn't get it immediately, but after seeing their teenage brother peel his "skin" back, they quickly followed suit.
After we got done eating our Peel-A-Pops outdoors, I had another surprise up my sleeve. I decided to make another treat, only "Wonkafied" I made some simple peanut butter candy balls, but I added some Rainbow Nerds to the mix. These crunchy, peanut buttery balls are delicious on their own, but with the tangy fruity Nerds flavors added, they were truly over the top delicious. Oh, and they only took about 10 minutes to prepare.
- 1/2 cup Peanut Butter (Crunchy or creamy both work well!)
- 1/2 cup corn syrup
- 1/2 cup white sugar
- 3 cups Corn Flakes
- 1 large box WONKA™ Rainbow Nerds
- Combine peanut butter, corn syrup, and sugar in a medium saucepan. Stir until well-mixed.
- Turn the burner to medium heat. Stir frequently until the mixture is bubbling. DO NOT allow this mixture to boil for more than 30 seconds!
- Remove from heat.
- Fold in the Corn Flakes and the Rainbow Nerds, mixing well.
- When the mixture is cool enough to handle, form it into balls.
- Eat and enjoy!
You can also find Wonka on Facebook and Wonka on Twitter. Be sure to follow them to stay on top of their latest products and promotions!


text:
The problem with that rant isn't that it's false.
The pain is real and the challenges of building amazing web experiences that can compete with native apps are something every company should take into account. That post never claimed it wasn't possible to build great web experiences, just that the cost was higher and required more developers of higher skill which of course, translates to higher cost and higher risk. All the great innovation in the framework space like React Native solve the overall front end architecture problem, but not the bits and pieces of the actual experience where shit meets fan.
The problem with that rant is that it's incomplete, and largely misses the point.
With a few – very fucking few exceptions – mobile apps perform really poorly when it comes to installs. I'm too lazy to link to all the research out there – just fucking google it yourself. There are over 2 million apps in the Apple and Android app stores, EACH. That would be like every person in New Mexico had their own app and they were all trying to get you to try it. The babies, the grownups, Jimmy McGill, and even the 73,530 people who voted for Trump. EVERYONE in New Mexico with their own app fighting for attention.
Even if you get someone to install your app, research shows that over 90% stops using it within 90 days. Retention is shit. My 12 year olds have over 100 apps on their phones and tablets. They actively use about 3. The rest just sits there wasting my family data plan when they insist on updating all those fucking useless apps. So much for taking cues from 12 year olds on how to run your business.
The area where native apps fail hard is viral distribution. Yeah, Twitter and Facebook have nice UX for showing off your app but those are not links you can easily copy and paste across platforms, in comments, emails, and text messages. Installing those apps can be annoying and time consuming, compared to opening a link in an embedded or external browser. There is no instant satisfaction or immediate follow through. Go through your phone and count how many apps you installed but never actually tried out yet because by the time it was ready, you had to get off the phone to pick up the dogs' shit (or whatever shit your life is blessed with).
But the biggest area of weakness for native apps is in attracting short term engagement. Yeah yeah, we all worship long term engagement and user acquisition but with the exception of a few major success stories, most of us look for the occasional hit. A news article, a viral video, or an entertaining but otherwise useless rant hitting #1 on hacker news. You collect enough of those, and you can be successful without having acquired permanent users for a while, until you can afford those. You know, how most non-social media works. The media not produced by fucking teenagers.
I don't care about the future of mankind, the liberation of information, the democratization of technology – the typical guilt-based marketing shit used by open web evangelists. I care about reaching an audience, and making it as easy and lightweight as possible. I want my customers to show up when they want to, and to make their very first visit something they don't have to think about because it involved opening an app store, reading about the app, making sure it's safe, clicking to download it, entering a password or their fingerprint, waiting for it to download, finding where the stupid phone decided to place the icon (what's up with that? Is it a game?), opening the app, learning what is often a new UX because some 20 year old decided conventions are for suckers, creating an account, logging in – then – if you are still interesting, learning how to use a completely new application. By the time you are done, you can't even remember how the fuck you got here in the first place (or what this sentence was about when it started).
Everything comes with a price and building native apps provide a much better control over the software development cost and risk. But like everything else in life, it's a tradeoff and this one is probably not the one you want to make. The one where you are trading off instant engagement and faster time-to-first-meaningful-action for a Gantt chart.
Is your new thing so fucking amazing that people are going to install your app and give it a chance? Statistically speaking, unless you are best friend with a famous celebrity or Apple decides to feature your app in one of their top categories or search results, you are pretty much fucked. Again, over 2 million apps – and the joke is, Apple is proud of this milestone. It was the first number they bragged about at their recent event. Remember New Mexico? NEW FUCKING MEXICO of apps.
Building anything online for profit (or where user acquisition is important) requires taking into account a lot of factors. Portraying native apps as some kind of magical technical solution, even a temporary one, to the pains and shortcomings of web development is stupid. Some applications will do better as native apps. Some won't. If you are producing experiences where the core value is information – news, images, videos, etc. you best chance of reaching the widest audience is still the web.
Sending someone a link is still the best distribution method online. If your content is stuck behind an app, it ought to be fucking incredible for people to go through the hoops required to get into it. Now, is it really that fucking incredible? Are you sure? Oh, and they need to see enough before they install the app to be convinced that's true. Which means, you are probably going to need to provide some web access to your content.
Oh shit – that means you still have to hire a few of those web developers and deal with the pain. It's never really app vs native. It's a complicated tradeoff between multiple factors and no matter how much you read about it, how many statistics you collect, how many experts you talk to, you will still have to figure it out on your own, based on the specific properties of the experience you are building. And keep evaluating your decisions.
The web is the present and it's a fucking mess. Deal with it.
A decade later, I'm the founder of a scrappy startup trying to reinvent web conversations. We have limited resources and a staff of almost 3, struggling to tame this fucking web. It is amazing how hard it still is to build innovative, quality web experiences. It is very much possible – there are plenty of amazing web developers building mind blowing experiences. The problem is, I can't afford to hire them, especially since a big chunk of them work for Google and Facebook.
It's hard running a small business. No matter where you stand in the political spectrum, the amount of regulation an American business has to deal with is fucking insane. From incorporation, liability, accounting, human resources, and taxes, the system is rigged for those who already succeeded. We have 2 full time employees and we spend over $6000 a year to make sure we comply with all the payroll and labor laws across multiple states and the federal government. But at least government regulation is a known, predictable cost.
The web on the other hand. Fuck.
I've been hearing a lot of high minded complaints about native apps lately. We made a bet on the web. Built a responsive site for desktop and mobile and tried to avoid the native app space (still are). Part of it was driven by cost (native app developers seems to think $50K is the smaller amount you should bill for a native app these days), but a bigger part was driven by the perception of recent breakthrough in web development. And yes, there has been significant improvement, especially around core language support and the power of transpilers.
But when it comes to page layout, to putting together a great experience, it's shit. And by shit I mean too fucking expensive.
One front end developer can build a great native app. It will work consistently as designed. But one front end developer is likely to attempt suicide trying to do the same thing on the web, especially now that the web is mostly (but not completely) mobile. Oh please shut the fuck up about the amazing new Washington Post mobile progressive web site.
Progressive web apps might be the future but if you are a startup trying to build new experiences, front end web development is probably at its lowest point. Mobile Safari is the new IE6. We have more amazing technology than ever before but we also have so much diversity of platforms, browsers, and screen types, that building a consistent experience pretty much means using almost none of it.
You want mobile notifications? Sure, but not on mobile Safari. Multiple line ellipsis? Sure, but only on webkit. Consistent rendering size across browsers? Just fuck off. We fix a layout bug on Safari and break something on Edge. We change font size on Chrome and now all you can see on Firefox is the letter F. How about hiding the address bar or controlling swipes from the left edge of the screen? Don't be stupid. Oh, and don't get me started on all these new custom mobile keyboards you can use and how autocomplete can fuck with your input box events.
Yes, you can build 2007 websites much better now. They will be consistent across platforms and perform great. But my 12 year olds don't want 2007 websites. They want 2016 apps.
We are going to build native apps because it turns out, it's cheaper. It's cheaper to build multiple proprietary applications than one responsive web app. As a CEO I can plan and predict the cost of building native apps, even with the required upgrades and annual breaking changes. I can't when it comes to the web.
Now, it doesn't mean we are giving up. I much rather build for the web and nothing else. But it pisses me off every time I see a Twitter thread about how native apps are destroying the free world. Open standards are always going to be inferior to closed ones. How many of our web evangelist are using an Apple laptop, the most closed ecosystem around? People love Apple products because a closed ecosystem will always deliver higher quality in any given moment. Now sure, 2016 Linux laptops are much nicer than Apple laptops from 2006. But nobody gives a fuck.
What's my point? As expected, it's shut the fuck up.
Building a native experience is unfortunately still the less risky business decision. I don't need you to troll me on Twitter and tell me how I'm betraying the web and the free fucking world. I am just trying to keep my startup going. Web progress is open progress and open is slow, painful, and by definition designed by a committee. It takes about a decade longer for open technology to reach the maturity of closed systems.
At the end of the day it is not about technology but about cost. In the last 10 years we have turned web development upside down. Massive backend scale is now a commodity while front end development is a monetary black hole. Do I miss IE6? As a CEO, actually yes. It would be much easier developing on one browser with a monopoly size market share – which is what native platforms are today. One app for iOS, one for Android, and I got over 90% consumer coverage. I can even use a framework to share work between the two.
The web is the future. The web will always be the future. But that's the problem. I need to ship products now.
(For a rebuttal – The Open Web, Fuck Yeah!)
We have a serious problem of user entitlement in open source. We have now seen many lead maintainers quit their own projects over constant abuse.
This affects everyone. Over the last year I have stopped supporting hapi users. The tone and attitude of open source users have become so negative, so demanding, and so persistent that I've decided I'm just not having any of it. I still write plenty of code, and most of it published as open source. I just don't talk about it anymore. The only people who get my attention at this point are other hapi.js lead maintainers and a select group of people who get my "platinum support service" via private channels. This premium support is free and is offered to friends and people I highly respect in the community.
As for everyone else –
If you don't pay me for my services or contribute meaningful value to me personally, I don't owe you shit. You are not my customer and you are rarely right. Open source is not an invitation for harassment and making demands. If you choose to interact with me about my open source work, remember it was your decision and you can stop interacting with me at any time. No one is forcing you to use my code. I am giving you a lot of free modules to do with as you wish. That license does not extend to my time or my attention.
I am a big supporter of Code of Conducts. Every project where people interact with one another should have one. What I am not supportive of is harassing maintainers to adopt one. The only right approach here is to nicely ask the maintainer if they would consider adding a CoC using a well establish template (ideally from a closely related project), and if they say no, to move on. Enough with the fucking indignation, the public shaming, the boycotts.
Same goes for documentation. I see more bitching and entitlement around quality documentation than any other issue. You are not entitled to good (or any) documentation. If you don't have the time to read the code, the tests, and the examples, shut up or fuck off. I don't have the time to explain shit to you. I document my work for my own needs. I publish a lot of code without any documentation. Don't ask me to add some. The only right thing to do is to ask if I am willing to take a pull request adding or improving the documentation. That's it.
You know those people who leave product reviews on Amazon on items they will never buy? Don't be those fucking people. If an open source project is not working out for you, just don't use it. Don't go posting on Twitter how shitty it is and how dickish the maintainer is. Just move on. Publishing code on GitHub is not an open invitation for abuse and humiliation. Every time I publish a new breaking release of hapi, people who have never (and will never) use hapi post shit about it on Twitter. What the fuck is wrong with them?
Why am I posting this? Why am I acting up so angry and negative?
Because I can afford to behave like this while other maintainers cannot. I am not going to lose work, reputation, or sleep over expressing these feelings publically and forcefully. However, this is not true for many new, young, inexperienced, or just sensitive maintainers who find themselves suddenly maintaining a popular open source project. They cannot afford to tell people to shut the fuck up or go fuck themselves without doing significant damage to their careers, reputation, or risk diving into deep depression.
I am posting this because someone needs to tell you to shut the fuck up, you entitled asshole.
It's me again.
The fuck OAuth guy.
Before that I was the guy who wrote this and then this (and then I took my name off it).
I wrote a replacement protocol and thought you might want to check it out.
Well, sort of. I didn't write a protocol. I wrote a JavaScript module providing a full authentication and authorization solution for building web applications. I am done with protocols and specifications. At the end of the day, I needed a working solution I could deploy and trust. The problem with security protocols is that they are useless without an equally solid implementation. The only point in a protocol is interoperability and I don't care about interoperability. I just want to build great products.
I actually wrote three modules.
Iron is a simple way to take a JavaScript object and turn it into a verifiable encoded blob. Hawk is a client-server authentication protocol providing a rich set of features for a wide range of security needs. Oz combines Iron and Hawk into an authorization solution. Together these three modules provide a comprehensive and powerful solution.
I'll take some questions now.
How is Oz different from OAuth?
OAuth, especially 1.0, is based on solid, well established security best practices. There is no reason to invent something new. OAuth 2.0 added the foundation for building highly scalable solutions. Any new protocol should be based directly on this existing body of work and Oz does just that. It throws out all the silly wire protocol parts because they add no value. Oz makes a lot of highly opinionated decisions about how to implement the things that actually matter. If you understand OAuth well, you should be able to pick up Oz and Hawk pretty quickly.
What so cool about it?
Oz provides a complete solution with full support for access scopes, delegation, credential refresh, stateless server scalability, self-expiring credentials, secret rotation, and a really solid authentication foundation. Some would say Oz goes a bit overboard in layering security but I don't think there is ever enough of that. The implementation is broken up into small utilities which can be composed together to build other solutions with different properties. And by braking it into three modules, you get to use just the bits you want.
Does it require client-side cryptography?
Yes. Building a solution without security layers is irresponsible and stupid. Don't do that. Bearer tokens are a bad idea. That said, Hawk, the layer providing the authentication component is trivial to implement. It's a simple HMAC over a few strings. No sorting and encoding and all that nonsense.
Who should use it?
Is it done?
Yes and no. The core protocol is done and is in great shape. It has been stable for over two years. You can expect the same quality engineering I've put into hapi. The code is lean, clean, and it goes out of its way to protect against developer mistakes. What's not done are the workflows such as the OAuth 2.0 implicit grant. Right now Oz provides an OAuth 1.0-like workflow, but more workflows (especially for mobile) will be added soon. Oz is in active development and will be the core security component of my new project. Expect it to get better as I continue to use it myself.
Is there going to be a specification?
Not if I had to write it. Honestly, I think a specification is a waste of time. I don't care about Oz on platforms other than JavaScript. While Hawk and Iron have already been ported to other platforms, I am not aware of Oz ports yet.
What the background behind Oz?
Oz was initially an OAuth 2.0 higher-level protocol developed for the Yahoo Sled project (now open sourced as Postmile). In fact, Postmile turned out to be the beginning of a lot of cool stuff including the entire hapi ecosystem. However, it turned out, the OAuth bits were adding no value and compliance just made development slower and more complicated. My initial focus was on the authentication bits which resulted in Hawk. Hawk is actually widely used already and was the foundation of the Mozilla identity API. Iron followed providing the token format needed to send self-encoded information securely (and is heavily used by hapi users). I then got stuck on Oz for about three years because I didn't have a use case for it. I left it alone for a while until it was time to put the final touches on it.
Got more questions?
Just open an issue and I'll do my best to answer.
Modules are products. They are something we create and present to the world in hope of finding an audience. You don't buy "car", you buy a BMW, or a Toyota, or a Cooper. Not a single module on the npm most downloaded list has a descriptive name.
What do you think is the chance of anyone producing a successful competing WebSocket plugin for hapi if I named my module hapi-websocket? A descriptive name from someone with authority means no one else gets to play and offer their own vision. I would like to think I get a lot of things right but I will never get everything right. A healthy environment means keeping a level playing field.
The problem with descriptive names and the reason people like them is they make life easier. It's the lazy way out. You search for "websocket", you find the websocket module. Done. Of course, the fact someone claimed the name has absolutely nothing to do with that module being the best one. The exact same outcome can be accomplish with keywords and a smarter search. Being the first person to grab a descriptive name should not give you an unfair advantage. Also, since good descriptive names are a finite commodity, you end up with a mouthful names with lots of hyphens which are a turn off for many people.
npm install poop.
Made you smile.
There are two types of hourly employees, those you can easily replace with full time people and those you can't afford (or can't convince) to work for you as W-2 employees. For the first group, the hourly rate is based on the employer cost of a full time person. Basically, the employer will want to keep its cost about the same regardless of the employee status.
The formula is:
Hourly rate = Total annual cash compensation / 1567
For the second group – people the employer can't afford to pay full time or the kind of top talent they can't convince to join full time – the formula is slightly different. There is an additional consideration. People doing short term contract work typically lose about 20% annually due to time in between jobs and the cost of finding work on a regular basis (a contractor factor of 0.80 – 20%productivity loss). Because they are top talent, the employer will have to pay for that loss. This gives us:
Hourly rate = Total annual cash compensation / 1253
The full formula is:
This means:
If the full time job come with equity (assuming a 25% annual vesting schedule of a publicly traded stock), you can add 25% of the equity value to the annual salary.
Brute force attacks are those in which the attacker is trying to gain access to the system by making repeated requests using different credentials (until one works). The most common example is of an attacker who tries guessing a user password. This is why passwords should be long and avoid using dictionary words to make it harder to guess. Properly designed systems keep track of failed authentication requests and escalate the issue when it appears an attack is in progress. Passwords are not the only credential used in web authentication. The most common implementation includes a login page which upon successful authentication sets a session cookie on the client. The session cookie acts as a bearer token – whoever shows up with the token is considered to be the authenticated user. Setting a session cookie removes the need to enter your username and password on every page. However, this session cookie now acts as the sole authentication key and anyone who gains access to this key will gain access to the system. Cookies are, after all, just a simple string of characters. A session id guessing attack is a type of brute force attack. Instead of trying to guess the password, the attacker is trying to guess the session id and forge the authentication cookie. The attacker generates session ids and tries to make requests using those ids, in hope that they will match actual active sessions. For example, if a web application session ids are generated in sequence, an attacker can look up their own session id and based on that forge requests using nearby session id values. To protect against this attack we need to make guessing session ids impractical. Note I'm saying "impractical," not "impossible".
The first step is to make sure session ids are sufficiently long and non-sequential. Just like passwords, the longer the session id is, the harder it is to find a valid one by guessing. It is also critical that session ids are not generated using a predictable algorithm such as a counter because if such logic exists, the attacker is no longer guessing but generating session ids. Using a cryptographically secure random number generator to produce sufficiently long session ids is the best common practice. What's "sufficiently long"? Well, that depends on the nature of your system. The size has to translate into an impractical effort to guess a valid session id. Another way to prevent an attacker from guessing session ids is to build integrity into the token by adding a hash or signature to the session cookie. The way the Express session middleware does this is by calculating a hash over the combination of the session id and a secret. Since calculating the hash requires possession of the secret, an attacker will not be able to generate valid session ids without guessing the secret (or just trying to guess the hash). Just like strong random session ids, the hash size must match the security requirements of the specific application it is meant to protect. This is because at the end, the session cookie is still just a string and open to guessing attacks. Session ids must be sufficiently long and impractical to guess. There are a few ways to accomplish this. The randomness and hashing techniques above are the two most common ways but not the only ones.
If we generate strong random session ids, do we still need the hash? Absolutely! The core security principal is layering. This is also known as not putting all your eggs in one basket. If you rely on a single source of security, you end up with no security at all if that single source fails. For example, what if someone finds a bug in your random number generator? What if they find a way to hack that part of your system and replace it? There are countless of known attacks exploiting exactly this – the generation of random numbers that turns out not to be so random after all. Combining a strong random session id with hash for integrity will protect against flaws in the random number generator. It will also protect against developer errors such as using the wrong random number generator function (e.g. the not so random method every system offers alongside the strong method). We all write bad code no matter how great our process is or how experienced we are. It is part of software engineering. This is why it is so important to layer your security. A moat is not enough, you also want a wall behind it, and probably some guards behind the wall. If you think using the wrong random function or a deep bug in OpenSSL are the only two issues here consider the common practice of monkey patching code in JavaScript and other dynamic languages. If someone anywhere in an entire application deployment messes with the global random facilities (for testing, logging, etc.) and breaks it (or it is part of a malicious code injection), session ids relying solely on randomness are no longer secure.
An important difference between guessing passwords and guessing session ids is the fact that passwords are associated with an account (e.g. username). The account-password pair makes it easier to keep track of brute force attacks because it provides a relatively straightforward way to keep track of failed attempts. However, when it comes to session ids, it is not as simple because sessions expire and do not include an account context. This means an invalid session id could come from an expired session or from an attacker, but without additional data (e.g. IP address) it would be hard to tell the difference in a large scale system. By including an integrity component in the session id (via a hash or signature), the server can immediately tell the difference between an expired session, an unallocated session id, and an invalid session. Even if you just log invalid authentication attempts (and you should), you would want to log an expired session differently than an invalid one. Beside the security value of knowing the difference, it will also provide useful insight about how your users behave.
Credentials should expire and therefore session ids should have a finite lifespan (where duration is very much a system-specific value). While cookies come with an expiration policy, there is no way to ensure it is actually obeyed. An attacker can set the cookie expiration to any value without the server being able to detect it. A common best practice is to include a timestamp in every credential issued, which can be as simple as adding a timestamp suffix to the randomly generate session id. However, in order to rely on this timestamp, we must be able to verify it was not tampered with and the way to accomplish that is with a hash or signature. Adding a timestamp to the session id allows the server to quickly handle expired sessions without having to make an expensive database lookup. While this might sound unrelated to security, it actually is very much core to maintaining a secure application. A denial of service attack (or DoS) is an attack in which the attacker makes repeated requests with the sole purpose of consuming too much resources on the server and either shutting it down or making it inaccessible to others. If every request authentication requires a full database lookup at the application tier, an attacker can use forged session ids to stage a DoS attack with ease. By including an integrity component in the cookie, the server can immediately identify forged or expired credentials without any backend lookup cost.
Sometimes things go wrong. And when they go very wrong, you need to have a way to immediately invalidate entire classes of sessions. Because generating a hash or signature requires a server-side secret or key, replacing the secret will immediately cause all session ids to fail validation. By using different secrets for different types of session ids, entire classes of sessions can be segregated and managed. Without such a mechanism, the application itself has to make a computed decision about the state of each session or perform mass database updates. In addition, in large distributed systems with database replication over different geographic locations, invalidating a session record in one location can take seconds and even minutes to replicate. This means the session stays active until the full system is back in sync. Compared to a self-describing and self-validating session id, the benefits are obvious.
An important feature of the Express session middleware is its support for user-generated session ids. This allows developer to deploy the middleware in an existing environment where session ids are generated by an existing entity which might reside on a completely different platform. Without adding a hash to the user-provided session ids, the burden of building a secure system moves from the expert (the module author) to the user (which is likely to be a security novice). Applying a hash is a much better approach than forcing an internal session id generator.
Adding a hash to a strong random session id is not all you should do. Whether your moat can benefit from crocodiles is, again, a castle-specific decision. Without going too far from the topic, there are plenty of other layers you can add to your session management tier. For example, you can use two session credentials, one long lived (lasts as long as the session) and another short lived (good for minutes or hours). To refresh the short lived you use the long lived but by doing so, you are reducing the exposure of the long lived credential on the network (especially when not using TLS). Another common practice is to have one cookie with general information about the user (e.g. first name, recently viewed items, etc.) alongside the session and to then include something from that cookie in the hash to create a binding between the user's active state to the authentication. It's a way of bringing back the "username" into the workflow. To go even further, hashing can be replaced with signatures and cookie content can be encrypted (and then hashed or signed on top). The security verbosity must match the threat.
If you take one thing away from this post I hope it is the concept of layering security. While math plays a significant role in security, it is far from the only tool. Measuring the odds of guessing a session id as the sole source of security is failing to recognize that security comes from a combination of defenses. I would also strongly advise against having the kind of academic debates focusing on a single aspect of a secure system in public (at least without the proper disclaimers). It is extremely misleading to narrow down the question to the point where it causing confusion and misinformation. Asking "is there a statistical benefit to hashing a strong random session id?" is harmful because it creates the false impression that this is the only consideration. It moves the discussion from the real world to that of an incomplete abstraction. As I hope I demonstrated above, there are a lot of reasons for including a hash beyond just making guessing impractical.
Over the past four years hapi grew to be the framework of choice for many projects, big or small. What makes hapi unique is its ability to scale to large deployments and large teams. As a project grows, so does its complexity – engineering complexity and process complexity. hapi's architecture and philosophy handles the increased complexity without the need to constantly refactor the code or build meta-frameworks on top of it, while keeping the simple cases simple.
hapi being a web application framework is not concerned with how the actual business logic is implemented. It provides the developer with a few hooks (in the form of handlers and extensions) to implement its logic and largely stays out of what goes into these hooks. As the project complexity grows, so does the need to decouple functionality and distribute internal load. The hapi server becomes the outwards facing interface (either via an API or UI) while behind it an array of other technologies is used to break the monolithic business logic into smaller pieces (some of which can themselves use hapi).
As node extends deeper into the full system stack and is used to implement more and more core services all the way down to the database or file system, we need better tools to connect all these components together. While we can certainly use many standalone hapi servers for a distributed RESTful SOA, this might add complexity and overhead that is better addressed with other tools.
The basic premise of microservices is to isolate business logic to its smallest components, each implemented separately and with a clear and simple interface. Complex solutions are then broken down into a set of small services which are composed together to provide the combined, orchestrated functionality.
The important part about microservices isn't the deployment strategy which should be based on load and scale requirements (as well as policies and politics). The focus is on writing the code in a way to allow these services to be deployed as both a monolithic single executable and as many distributed processes based on the evolving needs of the environment in which they run. Such decisions represent a trade-off between software complexity and operational complexity.
A good microservices framework provides the tools to define these components and connect them together through a message bus which supports this range of deployment strategies. As the project grows, services can be moved, changed, or replaced with minimal impact of the rest of the architecture because they can live side-by-side with older versions.
Seneca is a microservices framework from nearForm, a leading node consultancy based in Ireland. The nearForm team has been an early adopter for node and is an active member of the community (they organize the European NodeConf franchise among other activities).
The core feature of Seneca is the registration and invocation of actions through simple and powerful pattern matching. Each of these actions (which can be as simple as a single function) represents a microservice which in turn can invoke other actions. To reach another service, you just need to know it's matching pattern regardless of where it is deployed.
var Seneca = require('seneca'); // Create instance var seneca = Seneca(); // A microservice for loading a user record from a database seneca.add({ record: 'user' }, function (message, callback) { db.load('user', message.id, callback); }); // A microservice for information about today seneca.add({ service: 'today' }, function (message, callback) { return callback(null, { date: (new Date()).toString(), weather: 'Sunny' }); }); // Invoking the two services seneca.act({ record: 'user', id: '123' }, function (err, user) { seneca.act({ service: 'today' }, function (err, today) { console.log('Hi ' + user.name + '! It is a ' + today.weather + ' day today'); }); });
And to make things easier, Seneca accepts string patterns as well using a loose JSON format:
seneca.act('record:user,id:123', function (err, user) { seneca.act('service:today', function (err, today) { console.log('Hi ' + user.name + '! It is a ' + today.weather + ' day today'); }); });
The combination of the two services can be published as another service:
seneca.add('service:welcome', function (message, callback) { seneca.act({ record: 'user', id: message.id }, function (err, user) { seneca.act('service:today', function (err, today) { return callback(null, { message: 'Hi ' + user.name + '! It is a ' + today.weather + ' day today' }); }); }); }); seneca.act('service:welcome,id:123', function (err, result) { console.log(result.message); })
Seneca is ideal for building microservices implementing the bits and pieces of the application business logic. However, its pattern matching routing interface is optimized for internal consumption and less for public exposure of these services. It would be unusual to expose Seneca actions direction as a public API. In addition, Seneca focuses on the backend architecture, not on interfacing with a front end experience (single page application or server-rendered views).
The new chairo (which means "happy" in ancient Greek) plugin brings the power of Seneca to hapi by bridging between these two frameworks and allowing developers to use the richness of serving web and API content via hapi while building their business logic using the Seneca microservices architecture.
chairo is registered with a hapi server like any other plugin using the hapi server.register() method. Once registered it decorates the server and request objects with a reference to the seneca instance initialized:
var Chairo = require('chairo'); var Hapi = require('hapi'); var server = new Hapi.Server(); server.connection(); // Pass options to the Seneca constructor var senecaOptions = { log: 'silent' }; // Register plugin server.register({ register: Chairo, options: senecaOptions }, function (err) { // Add a Seneca action var id = 0; server.seneca.add({ generate: 'id' }, function (message, next) { return next(null, { id: ++id }); }); // Invoke a Seneca action server.seneca.act({ generate: 'id' }, function (err, result) { // result: { id: 1 } }); server.route({ method: 'POST', path: '/id', handler: function (request, reply) { // Invoke a Seneca action using the request decoration request.seneca.act({ generate: 'id' }, function (err, result) { if (err) { return reply(err); } return reply(result); }); } });
hapi already provides its own version of actions using server methods. While server methods can be cached and used as handlers and prerequisites, they cannot be decoupled from the server implementation and must reside within the same process. The new server.action() method provided by chairo maps a Seneca action pattern to a hapi server method. This allows using Seneca actions anywhere server methods can be used with the Seneca flexibility of maintaining the actual business logic elsewhere.
var Chairo = require('chairo'); var Hapi = require('hapi'); var server = new Hapi.Server(); server.connection(); server.register(Chairo, function (err) { // Set up a Seneca action var id = 0; server.seneca.add({ generate: 'id' }, function (message, next) { return next(null, { id: ++id }); }); // Map action to a hapi server method server.action('generate', 'generate:id', { cache: { expiresIn: 1000 } }); server.start(function () { // Invoke server method server.methods.generate(function (err, result1) { // Invoke the same server method server.methods.generate(function (err, result2) { // result1 === result2 (cached) }); }); }); });
In simple cases, all you want to do is map a Seneca action to a hapi endpoint and proxy the action result back. chairo adds a new reply() interface decorator reply.act() which sends back a handler response using the result of a Seneca action by specifying the action pattern.
server.route({ method: 'POST', path: '/id', handler: function (request, reply) { // Reply using a Seneca action return reply.act({ generate: 'id' }); } });
In addition, the act handler shortcut is also provided:
server.route({ method: 'POST', path: '/id', handler: { act: 'generate:id' } });
For more complex cases where a hapi endpoint requires combining data from multiple source, some of which are based on Seneca actions, chairo provides the reply.compose() decorator which renders a template view using the provided template and context object. The context object combines regular object keys with top level keys with a $ suffix which are resolved into the corresponding Seneca actions matching the key's value pattern.
// Set up a hapi view engine server.views({ engines: { html: require('handlebars') }, path: '../templates' }); // Add route server.route({ method: 'GET', path: '/welcome', handler: function (request, reply) { // Setup context with both Seneca actions and simple keys var context = { today$: 'service:today', user$: { record: 'user', id: 123 }, general: { message: 'Welcome' } }; // Reply with rendered view return reply.compose('example', context); } });
Using the template ./templates/example.html:
<div> <h1>{{general.message}} {{user$.name}}!</h1> <h2>Today is {{today$.date}} and it's going to be a {{today$.weather}} day.</h2> </div>
In addition, the compose handler shortcut is also provided:
server.route({ method: 'POST', path: '/id', handler: { compose: { template: 'example', context: { today$: 'service:today', user$: { record: 'user', id: 123 }, general: { message: 'Welcome' } } } } });
The initial version of chairo is a very basic implementation of the Seneca features within the context of the hapi ecosystem. It maps the basic actions functionality and allows simple and elegant composition of API endpoints and web pages in hapi powered by existing or new Seneca deployments. When used with more advanced Seneca configuration, the actions can be moved to other processes, benefiting from the full power of a distributed microservices architecture.
Future versions of this plugin will look to incorporate more Seneca functionality such as data entities, make routing configuration simpler for a large distributed system, and combine the logging functionality of the two frameworks into a unified operations view.
Please give it a try and post questions, feedback, or issues.
My first NodeConf (at the very first NodeConf in Portland) was a typical ineffective event. I didn't know anyone. No one really cared who I was and what I was working on. Yes, I could always name drop OAuth and other bullshit I worked on in the past but what I actually cared about – a node-based project called Sled – was of little interest to anyone. I also wasn't part of the small group of people who ran the node project. I didn't know any of them.
Conferences can be hard. They are not a natural place to meet people at a sufficiently deep level to build meaningful lasting connections. That's not true for all conferences but I am sure your first few events felt pretty lonely (unless of course you went with people you knew in which case you stuck with them and missed the point as well). NodeConf at Walker Creek Ranch is different. Completely fucking different.
First, it is attended by pretty much all the internet famous node celebrities (and me). Second, we are all Mikeal's hostages there. There is nowhere to go. There is nothing to do (other than hang out with people). There is barely any wifi so working on your laptop is kinda useless. This might sound terrible but here is the thing – everyone is equally stuck.
Hey look over there, it's Isaac – yeah the guy who ran node for a while and created npm. Want to chat with him? Go ahead – get him! How fast can he possibly run away from you in those ridiculous shoes? Nope, you are not wrong, that's Substack over there hacking away on some new crazy fucking tiny module shit. Ummmmmm – you guessed it, dshaw chilling out under the big oak tree (the same fucking tree the fucking domains API was conceived under – maybe this year will bury it there). Did a drone killing robot just run past you? I guess Raquel is up to no good again. And where's that awful sound coming from?! Must be Nexxy throwing another rave party at the boogie barn.
Being successful in node – like most other emerging platforms – require a solid network. With io.js moving faster than most people can keep track of and the module landscape changing daily, it is absolutely essential to be both connected to others in the community and to have access to the people who can help you out. Getting a question answered about node or an npm module is dramatically easier when you had a drink with the author and can ping them directly on IRC or email. Making a personal connection matters a lot.
I can tell you without a doubt that my personal success with node and my community connection were both directly result of attending the very first NodeConf SummerCamp at Walker Creek Ranch. This is where I met all the people I have later worked closely with to make node a huge success at Walmart. That event was instrumental to my personal success and the success of my employer. Need proof I'm super successful? Well, I'm the only person who's picture has ever been posted on the official nodejs.org website – after all, isn't that how we measure success!
NodeConf this year is likely to be a smaller event. This means more quality time with people, more meaningful connections. If you are able to travel to CA for the event, you have to be an idiot not to. It's really that simple. Here is a chance for you to spend time with the people who wrote a lot of the stuff you're using, and the people who are likely to write it next. This is the place where so many of the second and third round of node leaders came from and you could (and should) be part of.
If this sounds like a bit of hero worship, it's not. I am dropping names because these are all amazingly generous people who not only helped push node forward, but are also known for their kindness and welcoming attitude. They are all very busy and in other places can be hard to get hold of for a meaningful conversation. But at Walker Creek Ranch, we're all just hanging around chillin'. The setting is so beautiful and relaxing that no one is treated differently. There are no private rooms, secret parties, or dinners where all the cool kids are hangin' (except you).
This should be the easiest conference expense to justify to your boss. If you are doing node and have never been to a NodeConf event at the ranch, you are throwing away an opportunity to improve your skills, your network, your influence, and make a difference at the company you work for. It is a no brainer.
There are still tickets available and if you use my discount code you will get $50 off any ticket type. I expect to see you there next month!
Looking back, there is much to be proud of. We have produced massive amounts of open source code that have been successfully adopted by dozens of companies. We created an open flow of information on our production experience (e.g. #nodebf) that played major role in increasing node adoption by the enterprise. It's amazing how our small team of 18 people had an amplified influence over the future of node. I am extremely grateful for the trust I was given building and leading this exceptional team. This was very much a team effort all around.
Our biggest and most visible accomplishment has been the creation of the hapi framework and its community. It is very hard to predict how an open source project will work out, especially one created by a corporation (and even more so when that corporation is Walmart). hapi's success clearly demonstrates that by embracing the community and openness from the start, companies can reap valuable rewards.
We never said "we want to work with the community" because we considered ourselves part of the community. Over the last year, the vast majority of work on hapi modules has been done by people outside of Walmart. In fact, the shift has been so dramatic that we changed the entire governance model last year to encourage and empower this transformation. At this point, Walmart is responsible for a very small share of the resources maintaining the codebase and the community.
This transformation has been so successful that it is no longer a Walmart project – and that's a huge win for Walmart. Walmart gets to continue to benefit from their initial investment by having access to a best-in-class framework, custom-made to suit their needs, with little to none ongoing cost. They planted and nurtured a seedling and now get to share in the benefits of the tree, cost free.
There were two less visible accomplishments (but equally impressive) worth mentioning. The first is the amazing remote team we built which can serve as a model for other companies to follow. When I joined Walmart, attracting talent was a major challenge. People interviewed with us for the sole purpose of getting a competing offer to leverage against the company they actually wanted to join. But by reaching beyond the local Bay Area boundaries and showcasing our work and community participation, we quickly became one of the most sought after teams to join.
The second is the culture of quality we created. Learning from open source and community management best practices, along with extensive investment in testing tools, we developed an engineering workflow that has produced unmatched quality results. What is impressive about it is how quickly it was adopted by others outside of Walmart and the hapi community.
It has been gratifying to see our accomplishments celebrated by the community and to be able to share our success with others through open source and public sharing of information. Walmart has been consistently supportive of these dramatic cultural shifts in attitude towards the outside world more than any company I have previously worked for. I hope others will use this example to push for change in their own organizations.
As for hapi moving forward, nothing changes. I will continue to maintain hapi and participate in leading the community around it. As I mentioned above, hapi has been successfully transitioned out of Walmart over the last year and is fully owned by the community that supports it. No one owns any trademarks or has special rights to the code, names, logos, etc. It's all under the same open license.
There is one person I have to thank by name and that's Dion Almaer – you won't find a more supportive, generous, and inspiring person to work for. It has been an amazing experience and I am grateful to everyone who took part – we share these accomplishments.
As for what's next, I guess it's time to find another adventure (yep, I'm looking).


text:
Associate Professor Peter Rutledge
BSc MSc Auckland; DPhil Oxford
Associate Professor
Associate Head of School (Teaching)
F11 - Chemistry Building
The University of Sydney
Telephone | 61 2 9351 5020 |
Fax | 61 2 9351 3329 |
Website |
Rutledge Group Contact Details |
Biographical details
Peter is a Senior Lecturer in the School of Chemistry at The University of Sydney. He received his BSc (Chemistry & Biochemistry) and MSc (Chemistry) from the University of Auckland, and completed his DPhil with Professor Sir Jack Baldwin at the Dyson Perrins Laboratory and Magdalen College in Oxford, working on penicillin biosynthesis.
He was appointed as a Post-doctoral Research Fellow in the Dyson Perrins on completing his DPhil and held College Lectureships at Magdalen College (2000-2001) and Somerville College (2001-2002). In 2003 he moved to a Lectureship in Chemical Biology in the newly established Centre for Synthesis & Chemical Biology at University College Dublin.
Peter took up his position in Sydney in February 2006 and was promoted to Senior Lecturer in 2008. He has held the RACI Athel Beckwith Lectureship (2007) and Nyholm Lectureship (2007–2009), and was awarded an AIPS Young Tall Poppy Award in 2008.
Peter has won the Vice-Chancellor's Awards for Outstanding Teaching (2011) and Support of the Student Experience (2010), an Australian Learning and Teaching Council Citation for Teaching Excellence (2011), and the Pearson Education RACI Centenary of Federation Chemistry Educator of the Year Award (2012).
- BSc & MSc (Hons I) The University of Auckland, New Zealand. (1991-1995)
- DPhil The Dyson Perrins Laboratory & Magdalen College, Oxford, UK. (1995-1999)
- Postdoctoral Research Fellow, The Dyson Perrins Laboratory, Oxford. (1999-2002)
- Lecturer, Magdalen & Somerville Colleges, Oxford. (2000-2002)
- Lecturer, Centre for Synthesis & Chemical Biology, University College Dublin. (2003-2006)
- Lecturer, School of Chemistry, The University of Sydney (2006-2008)
- Senior lecturer, School of Chemistry, The University of Sydney (2009-2013)
- Visiting Fellow, The University of Warwick (2012)
- Associate Professor, School of Chemistry, The University of Sydney (2014-)
Research interests
Hydrocarbon Oxidation and C-H Activation: The conversion of simple hydrocarbons (alkanes, alkenes and aromatic compounds) to functionalised targets is of great interest in synthetic and medicinal chemistry, but many of these key transformations are inaccessible with current synthetic methods. Nature uses highly efficient enzyme systems to oxidise hydrocarbons in high yield with complete selectivity. We are working to develop new catalysts inspired by these biological systems, and to use them for the selective oxidation of hydrocarbon substrates: new reagents for synthesis and for the environment. We have synthesised a series of small-molecule systems that mimic the non-heme iron oxidase (NHIO) active site and are developing these as catalysts for biomimetic hydrocarbon oxidation and iron-mediated C-H activation.
Antibiotics Chemistry: The rise and rise of the so-called 'Superbugs' is well documented in the media. Bacteria that are resistant to (i.e. not killed by) most current antibiotics are increasingly widespread, and the need for new drugs and new strategies to combat them grows ever more important. We are widely interested in antibiotics chemistry and antibiotic biosynthesis, and are pursuing a number of approaches to meet the challenges posed by antibiotic resistant bacteria. Current strategies include the synthesis of new cyclobutanone antibiotics and the design of antibiotics with novel 'double-punch' and 'resistance-activated' modes of action.
Mercury Binding: Heavy metals like cadmium and mercury form some of the most toxic materials known. Yet some plants and microbes have developed strategies to live in locales prone to high levels of cadmium and mercury pollution, using sulfur-rich proteins to bind and the toxic metal ions and sequester them away from the rest of the cell's machinery. These proteins incorporate high numbers of cysteine residues, which makes them effective agents for heavy metal sequestration: the numerous sulfur atoms bind tightly to mercury, cadmium and other metal ions. Our approach uses thiol- and sulfide-rich peptides as agents for binding and sensing mercury.
Nitrile Hydratase Mimics and Mechanism: Nitrile hydratase is an unusual metalloenzyme that brings about the selective conversion of nitriles to primary amides. Crystal structures of nitrile hydratases show a remarkable ligand environment in the active site. Two nitrogen atoms from main-chain amides bind to the metal (iron(III) or cobalt(III)), along with three sulfur atoms, each in a different oxidation state. And these five metal binding ligands are located in a short section of the primary sequence, spread across only six amino acids in one peptide chain. We are working to develop new peptide-based systems as bio-inspired catalysts for nitrile hydration, to study the unusual sulfur oxidation that occurs at the nitrile hydratase active site, and to elucidate a detailed mechanism for nitrile hydratase catalysis.
For further details on all of these areas, please visit http://sydney.edu.au/science/chemistry/~rutledge/
Current research students
Project title | Research student |
Cobalt complexes as responsive MRI contrast agents | Edward O'NEILL |
Awards and honours
- Pearson Education RACI Centenary of Federation Chemistry Educator of the Year Award (2012)
- Vice-Chancellor's Award for Outstanding Teaching (2011)
- Vice-Chancellor's Award for Support of the Student Experience (2010)
- RACI NSW President?s Citation (2009)
- NSW and ACT Young Tall Poppy Science Award (2008)
- RACI Athel Beckwith Lectureship (2007)
- RACI Nyholm Lectureship (2006)
Honours project opportunities
- Metal ion sensors for biology
- Fluorescent imaging agents for cancer diagnostics
- Biocatalysis and bio-inspired catalysis
Selected grants
- Inhalation Delivery Sysytem for Drug and Vaccine Delivery; Britton W, Chan K, Triccas J, Rutledge P, Traini D; DVC Research/Equipment Grant.
- A new class of inhibitors for the treatment of tuberculosis; Triccas J, Rutledge P, West N, Todd M; National Health and Medical Research Council (NHMRC)/Project Grants.
- University of Sydney Automated Peptide Synthesis Platform; Payne R, Britton W, Byrne S, Chan K, Clarke R, Hunt N, Jolliffe K, Kassiou M, Lay P, Mackay J, Matthews J, McErlean C, New E, Rasmussen H, Rendina L, Rudrawar S, Rutledge P, Shepherd N; National Health and Medical Research Council (NHMRC)/Equipment Grants.
- Charting Intercellular Space; Todd M, Rutledge P, Smith P; Australian Research Council (ARC)/Discovery Projects (DP).
- Target Activated Therapeutics: A New Strategy for Monitoring and Treating Breast Cancer; Todd M, Rutledge P, Sutherland R, Butt A; National Breast Cancer Foundation/Pilot Study Grants.
- 800 MHz NMR spectrometer for biomolecular structure-function analysis; Mackay J, Otting G, Kuchel P, Matthews J, Gell D, Trewhella J, Rutledge P, Messerle B, Vadas M, Graham R, Vandenberg J, Stock D, Ball G, Fazekas de St Groth B, Shine J; Australian Research Council (ARC)/Linkage Infrastructure, Equipment and Facilities (LIEF).
- 800 MHz NMR spectrometer for biomolecular structure function analysis; Vadas M, Stock D, Graham R, Shine J, Ball G, Matthews J, Gell D, Trewhella J, Rutledge P, Messerle B, Fazekas de St Groth B, Vandenberg J, Mackay J, Otting G, Kuchel P; Australian Research Council (ARC)/Linkage Infrastructure, Equipment and Facilities (LIEF).
- Biologically Inspired Catalysts for Nitrile Hydration: New Tools for Synthesis and Bioremediation; Rutledge P; University of Sydney/Bridging Support.
- An XAFS study of non-heme iron oxidase mimics; Rutledge P; Australian Nuclear Science and Technology Organisation/Australian Synchrotron Research Program.
- New catalysts for hydrocarbon oxidation; Rutledge P; University of Sydney/Early Career Researcher.
- Peptide mimics of nitrile hydratases: crystallographic and mechanistic studies; Rutledge P; Science Foundation Ireland/Research Grant.
- Enzyme mimics for the bioremediation of nitrile pollutants; Rutledge P; University College Dublin/President's Award for Research.
- Enzymes and enzyme mimics for the bioremediation of polycyclic aromatic hydrocarbons; Rutledge P; Irish Research Council for Science/Postgraduate Award.
- Enzyme mimics for bioremediation and environmental reclamation; Rutledge P; Higher Education Authority (Ireland)/Program for Research in Third Level Institutions, Cycle 3 Grant.
Selected publications


text:
Dyce, just north of Aberdeen, was reopened for the airport, though restoration of the "subbies", Aberdeen's lost local trains, would improve matters.
Glasgow's airport link was hampered by the notorious politics of Paisley, but is now being prepared by Strathclyde Passenger Transport and would link in with the city's Crossrail plan.
An airport station on the Edinburgh-Fife line has been long suggested and may come when the city's traffic restraint policies are matched by rail development.
Leamington Spa,
- More about:
- Aberdeen
- Heathrow Airport
- London City Airport
- Railway


text:
Was in the mood to draw some cars today, found this old Datsun not far from my house. The AlfaRomeo I found in my sketchbook, from more than a year ago, finally watercolored it.
One Response to ""
Nick Porcino Says:
September 6th, 2010 at 10:10 pmThe Alpha looks like a Julietta. My dad had one, the shifter was on the dash. That was one fast car!


text:
Successfully Securing Your United States Student Visa in 2016 Get accepted to university
After being accepted by a university or college in the U.S., all thats left to do before starting on your exciting journey abroad is to get the U.S. student visa. While the amount of different information to keep in mind may be overwhelming at first, it will all become clearer once you have all the information organised. Dont worry! Every year over 500,000 international students get their U.S. study visa.
The following guide ensures youll have all the essential information you need to be successful. Keep in mind that whenever you have questions the university you have applied to, or the U.S. embassy in your country can provide the answers you need.
Anyone who is not a citizen of the USA will need a student visa to attend a university or college in the States.
Find and compare all Master's programmes in the United States here!
Types of student visa for the U.S.
There are three different student visas that you could be issued for international students coming to the U.S.:
- F1 Visa - issued to students who are attending an academic program or English Language Program, valid until the completion of your study programme.
- J1 Visa - students who need to obtain practical training that is not available in their home country to complete their academic programme (exchange students).
- M1 Visa for students who plan to attend a non-academic (technical) or vocational school. This type of visa does not allow employment in the U.S. during your stay.
We will be focusing on the F1 Visa, as this is the most common study visa for the U.S., specifically designed for full-time academic degree studies.
Advantages and restrictions of the USA study visa
- The student visa is valid for the duration of your studies. You may stay in the States as long as you are a student.
- After students have completed their degree in the U.S. they are allowed to stay in the country for an extra 60 days, to prepare for departure or transfer to another school.
- F1-visa students may only get part-time employment on-campus (fewer than 20 hours per week).
- You will be allowed to arrive in the U.S. 30 days before the start of your classes.
- To keep your student visa you need to remain enrolled and maintain passing grades at your university. If you are unable to complete your programme in the previously set time, your international adviser can help you request a programme extension.
- If your passport expires, your countrys consulate or embassy can help you extend it.
Before applying for visa
To be able to apply for your USA student visa, you will first need to be admitted to a college, university, or English language school in the United States. They will send you the I-20 form (for F-1 visa) or the DS-2019 (for J-1 visa). After receiving the document, make an appointment for the visa interview. Apply early to avoid delays.
Conditions you have to meet to apply
- Applicants must satisfy several strict criteria in order to receive the visa, including:
- Students must have a residence in their home country where to return after completing their studies.
- Students may only study at the accredited academic institution through which the visa was granted.
- Applicants must demonstrate sufficient financial support. Read the USA Financing Guide.
- All applicants must demonstrate that they have strong ties to their home country, such as a job offer letter upon completion of studies, personal assets (i.e., house, land, vehicle, etc.), bank accounts, family, etc.
- Additional documents may be required depending on the country you are applying from.
Speaking English is not a requirement for a student visa, but it will likely be a requirement for your university admission.
Required application documents
Although the process may vary or require additional steps, depending on your country and embassy or consulate, you will need the following when applying for your student visa:
- Certificate of Eligibility for Non-immigrant (F-1) Student Status (Form I-20), received from your university (pay 200 USD fee);
- Receipt of paid application fee of 160 USD for the U.S. Embassy in your country;
- Submit Online Form DS-160 for a non-immigrant visa;
- Passport with a validity date at least six months beyond your intended period of stay in the United States;
- Old passports;
- Documents that prove your financial situation (bank statement), or financial support during your studies;
- Standardised recent digital colour photo.
Country-specific study details related to student visa application
Here are a few detailed links explaining application procedures in the countries with the most student applicants for visa:
- India
- Nigeria
- The United Kingdom
- China
- South Korea
- Saudi Arabia (Riyadh)
F1-Visa Interview
Your F-1 visa interview will determine whether you are qualified to receive an F-1 student visa for the USA. Digital fingerprint scans will be taken for records. Your passport will be taken so that you can get your visa and you will be informed when you can get it back.
Bring all of the required documents and receipts. You will be required to answer personal questions about your decision to study in the U.S. If you are unable to answer the questions in English, you can ask for an interpreter. The interview will not be longer than 5 minutes.
Interview questions will focus on:
- Why you chose to study in the U.S.
- Academic qualifications (test scores) and questions about the university you enrolled in.
- Ties and obligations that ensure your return to your home country, after graduation.
- Proof that you have the means to finance your education.
Based on your answers the consular officer will approve or deny your application. You need to convince him or her that you plan to return to your country after your years of study in the United States.
Find and compare all Master's programmes in the United States here!Improvements of visa work regulations after graduation
The situation for visa students in the USA is in some case better than in other parts of the world, and it's about to get even better. Beginning with May 10th, 2016, the post-study work extension for international students who have graduated a STEM (Science, Technology, Engineering, and Mathematics) subject is increasing from 17 to 24 months.
All students also benefit from an additional Optional Practical Training OPT period of one year, on top of the work extension period. This is great news for students who want to work in the States after graduation.
7 tips to pass the U.S. student visa interview
- Dress formally for your interview. First impressions can be crucial.
- Practice your English before the interview. While this is not a requirement for approval, it can create a good impression and stress the fact that you are serious about studying in America.
- Know the programme you are applying for, and how it fits your career plans.
- Be to the point, as there are many applicants and visa officers are under a lot of time pressure.
- Have the proof documents ready, to make it easy for the visa officer to browse.
- Maintain a positive attitude. If you are denied the visa, ask for additional documents you could bring in order to contest the refusal.
- If your spouse and children are remaining behind in your country, be prepared to address how they will support themselves in your absence, especially if you are the familys main source of income.
For additional information about the USA student visa, visit the U.S. government website.
Get free updates about study programmes in the United States!


text:
Please sign in to comment. Don't have a profile? Join now! Joining is absolutely free and no personal information is required.
Hey, Mr. Tux, meet Ms. Tux
This is my Heidi. A very pretty tuxedo cat with the greenest eyes. Not too happy that I woke her up from her nap, though.


text:
As we were preparing to move my daughter and I went through boxes and boxes of memorabilia. It was fun going through them together and seeing all the old photos, . . .
The other day I was watching a family TV show entitled "The Middle." The daughter was graduating from high school. Everything she had worked so hard to achieve in her four years . . .
While teaching at Brown Mackie College (Bettendorf, Iowa), in June of last year, United States Army Major Wayne Stratton, collapsed in agony. "The searing abdominal pain came out of nowhere," said . . .
A bright and shining light is what I would call Staff Sergeant Kevin Hopson. He does the unexpected for others. This character trait is what sets him apart. Recently I heard a . . .
Sherry paced the floor, she stopped for a moment and looked at her watch. 'She is late again' Sherry thought. "Teenagers these days just don't take their responsibilities seriously", She said under . . .


text:
garage paint booth help please
okay, first off TONS of great info on here. i could read through all these threads for days and not get bored. :thumbup:
you guys motivated me to build my own paint booth. it will be for only painting motorcycle plastics so luckily it doesn't have to be as big as the booths for cars. i would like it to be a long lasting fixture, so no need to be able to break it down. right now i am looking at making it 8'x11' and probably about 8ft high. i am running into a couple problems. i plan on using the 8mm plastic sheeting from lowe's for the walls. should i use wood or pvc for the frame? if i use pvc how do i go about attaching the plastic to the frame and making it air tight? what should i use where the plastic sheeting overlaps and i need to seal two sheets together? how are you guys making doors on your homemade booths? keep in mind i would like it to be airtight. thanks a ton guys. Luke |
Hey Luke- saw no one answered you yet so I'll see if I can help- I have my own booth now, but when I first set up a small plastic sheet one I used wood 'stringers' for framing and stapled in to the top- sealed all the sheets with plastic sealing tape on one of those roller dispensers- made it simple to just stick and rip! For the 'door' I just overlapped two sheets, then put a brick on the bottom of the first sheet- that kept it in place as I slid between them to get out. I taped a squirrel cage fan on one end at a cutout hole and a couple filters on the other end and just ran the airhose under the sheet. Worked okay as long as you didn't go in and out a lot and always had a GOOD supply of air coming in. Be careful, as you want to follow all safety precautions- respirator, good airflow, light, etc... Good luck and hope I helped!!
Must have missed this post.
Here's a pic of the temporary booth I built when I painted my '41. Used a wood frame and plastic sheeting. The sheeting was stapled to the ceiling and to the frame and I used duct tape to seal the plastic sheets together. Also duct taped the plastic to the floor. http://hotrodders.com/journal_photos...0826358382.jpg I used three box fans blowing air in through furnace filters and one box fan sucking air out through a filter. This kept the booth pressurized and the dust down. Worked pretty well if I do say so myself. The doors were made using a wood frame and were covered in plastic sheeting. Make sure you have a good fresh air supply for breathing too. You don't want to breath the iso's in modern paints because they can kill you. Good luck. Centerline |
thanx guys!
i'll be sure to post some pics once i get it all setup. |
I just built a similar booth to Centerlines. I used 2x4's for the frame. It's 20' x 12'. I used heavy weight plastic with all the lights outside the booth. So far I've painted one car in it and it worked pretty well. I'll definately add more lights for the next car (sometime this week); I don't think you can have too many lights. The plastic got a bit covered with overspray, but nothing too bad. I used two box fans, they seemed to work pretty well. The back door is a single piece of plastic with a 12' piece of wood at the bottom. When I was spraying I had the door rolled up about two feet off the ground. The exhaust was through this 2 feet. Seemed to work pretty well.
If your going to use it a lot I would lay it out on paper a few times to get it right. Maybe put a door on the side wall in a permanent frame and a squirrel cage blower in the wall. That way all you would need to do is set up the walls. The booth I now is in a building that is heated and cooled. My door has a full length filter, I buy a roll of AC filter stuff, and the squirrel cage pulls the heated or cooled air from the building into the room, that way in the winter I have no source of combustion in the booth but I get the room nice and warm and in the summer the humidity is reduced because I pull the conditioned air.
If I were going to do it in the garage I would do the same thing, set a door that will always be in place, as well as the air lines, dryer and exhaust system in place also mount a bunch of lights, I have 6 8' long 2 bulb florescent lights and it is not enough or it is the wrong king of light? Last paint what ever walls that will stay in place and the roof and even the floor if possible in a very light color. Then all you would need to do was hang the plastic. You would have a good entry door and ventilation system in place. |
I learned to paint in the Air force (I'm still in but for only a couple of more months) I've never spayed a car yet but I've spent all kinds of time slinging paint on fighter jets. I'm planning on setting up my on spay booth someday soon. This thread got my attention and my question is are just a couple of box fans enough air flow? I'm just use to aircraft hangar sized booths I guess...
I had made plans for one, but ended up being able to use my neighbors booth at his bodyshop...anyways...a couple of observations:
The Home Store plastic sheeting may tend to become 'brittle' after exposure to the solvent vapors and may need to be replaced every so often (not a big deal as it's cheap) To seal the sheeting to the PVC tubing use the bonding glue that is used when assembling a sprinkler system (usually blue in color). To make a doorway that seals up well, glue strips of refrigerator magnets to the ends of each sheet (sealing partition), making sure that you have the mangnetic pole the right way around. Make sure that there are no ignition sources in your garage, like a water heater, clothes dryer (nat. gas), or furnace etc....the vapors can and will ignite....seen it happen!!! Same goes for the exhaust fan...get an explosion proof fan (Class I, Div. I), as the vapors could also ignite from the arcing of the fan (not common, but the potential is there). If you have neighbors close by, have the exhaust fan blowing onto a wet towel or blanket (keeps vapors and overspray down a bit) Tim |
i'm getting ready to paint the vette this week, a couple of things i need to note, maybe ask a few.
i mistakingly used plastic to cover the underside of my doors while i primed the surface. when dry the primer flaked off and made a mess,will this happen in a spray booth made of plastic?? or will not spraying the booth walls be enough. as far as a door goes , a frame of wood with plastic over, fold some plastic and staple it on as weather stripping. i've got 3m filterte furnace filters and regular ones as a backer, will this do? also i'm using the fan off a hot air oil furnace.they work well and there real cheap used. in a more used application(using mine once)would it be better if it was made of cheap nylon cloth or the like?? the seams will be duct taped as will the spots on the wall where i will shoot the staples in to hold the plastic..i'm plasticing the floor too and seaming it all tight to the filters and fan, like in a big pop bottle. will this work or will i still have dust in the finish??all opinions welcome.mike |
For a temporary one, consider using the framework for those cheap "carports". You know, pipe framework & silver tarp roof... Instead of the tarp, cover it with visquine & use a ton of those cheap plastic clamps. If you do it outside, it makes a nice oven for the fresh paint to bake in. It gets damn hot inside one of these in the sun.
Another thing I found, I think it's best to use the plastic only once. The overspray won't flake off right away; but it might a few days later. I painted two cars within two weeks, and there was some contamination in the second car from old paint coming off the used plastic. I have one more car to paint, and I'll replace the plastic before. Plastic is really cheap, so it's worth replacing for each job, in my opinion.
dh |
what about those canopies that you can buy from wal-mart. i found one that is 10" x 20" for around 80 bucks...it comes with the frame and the roof. the same company also sells the 3 walls and one zippered door, for about 60 bucks more. will the paint damage the material in these pieces? i was thinking of just buying the frame/roof and using regular visquene for the sides. would this work well enough for a paint booth? it will be set up in my backyard, and i will only be painting small pieces...starting with my dashboard from my truck.
paint booth reply
I also paint only motorcycles. I built my paint booth out a metal yard shed I bought at sears on sale. It is an 8x10, plenty big enough for m/c tanks, side covers, fenders or a frame. I built the floor out of pressure treated 2x6's for floor joists and used OSB for the floor. I sealed every joint with a latex caulking ( don't use silocone caulkig as you will get plenty of fish eyes in the paint as it slowly vapors off as it cures ) when the building was put together I also sealed it where it was screwed to the floor. I put 2 high velocity fans at one on top of each other to exhaust and made frames to hold 8 20x20 a/c filters in both ends. The none fan end pulls the air thru from the out side and the other 8 filters catch the over spray just in front of the ehaust fans. I will try and post a couple of pics in a day or two. Kind of hard to explain the filter and fan system. I also made the sliding door seals out of garage door seals that go on the bottom of roll ups to keep water out of your garage. I researched paint booths and the experts say you do not want a negative pressure in a paint booth but only a very slight positive pressure. This setup has worked real well for me to have paint jobs come out clean with out dust or dirt specks.
Here's a page detailing my building of a temporary sandblast booth in my shop, using basically the same techniques and materials as those above. ...plastic sheeting on wood 2x2 framework.
http://www.oldsmobility.com/F100/my67-p12.htm |
you need good ventilation- preferably downdraft, but that's exspensive compared to more economincal "fan in the wall" deals. Don't forget filters to have clean air coming in and to remove paint droplets going out.
All times are GMT -6. The time now is 06:25 AM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Search Engine Optimization by vBSEO 3.6.0 PL2
vBulletin Security provided by
vBSecurity v2.2.2 (Pro) -
vBulletin Mods & Addons Copyright © 2017 DragonByte Technologies Ltd.
Copyright Hotrodders.com 1999 - 2012. All Rights Reserved.


text:
Tuesday, 23 November 2010
This is why...
... I prefer quality to quantity. Okay so I love a red dress and I love Valentino. I'm currently weeping over all the rubbish things I bought, if only I'd saved my money for this moment!! Discount Valentino available on The Outnet
More Life Laundry to come when I've stopped weeping!
5 comments:
Thank you for commenting, much appreciated. Sorry about no longer offering anonymous comments but spamming had become a very annoying issue. xxx
Subscribe to:
Post Comments (Atom)


text:
Forgot Password?
Not a VIP Member? Join for free!
Newest Games
All Active Games
Middletown – More than half of the Pennsylvania Lottery's Millionaire Raffle tickets have been sold for the July 9 drawing. Fewer than 250,000 tickets remained as of 11 a.m. on June 24.
The raffle-style game offers 6,000 cash prizes totaling more than $5 million. Sales of Millionaire Raffle tickets began May 13 and will continue until 5 p.m. on July 9, or until all 500,000 tickets are sold, whichever comes first. Tickets for the 11 previous Millionaire Raffles sold out before each drawing.
Winning Millionaire Raffle ticket numbers will be randomly selected at 6:59 p.m. on July 9, when the Lottery's live drawing show will televise the selection of four $1 million, top-prize raffle ticket numbers and four $100,000, second-prize raffle ticket numbers. The remaining 100 winning ticket numbers for prizes of $1,000 each and 5,892 winning ticket numbers for prizes of $100 each also will be selected, but will not be televised live due to time constraints. In total, 6,000 prizes worth $5,089,200 will be awarded.
A complete list of all 6,000 winning raffle ticket numbers will be available at Lottery retail locations and at www.palottery.com.
About the Pennsylvania Lottery: The Pennsylvania Lottery remains the only state lottery that designates all its proceeds to programs that benefit older residents. Since its inception in 1971, the Pennsylvania Lottery has contributed nearly $20.6 billion to programs that include property tax and rent rebates; free transit and reduced-fare shared rides; the low-cost prescription drug programs PACE and PACENET; long-term living services; and the 52 Area Agencies on Aging, including full- and part-time senior centers throughout the state. The Pennsylvania Lottery reminds its players to play responsibly. Players must be 18 or older.
For drawings results, winning numbers, winners' stories and to subscribe to the Lottery's RSS news feed, visit www.palottery.com.
Return to List
Pennsylvania Lottery Benefits Older Pennsylvanians. Every Day.


text:
Since 1987
The dispensing technology that provides a single drop every time.
Fit any pump to any jar with unlimited cap option.
Control dispensing with a wide range of bulb and pipette materials, caps, styles, and deco options.
It's a FIRST! Caps that snap onto existing PET preforms.
Dispensing expertise that can only come from years of focus
All-in-one measuring and dispensing solution
The perfect match for EuroDrop caps and inserts
A practical choice for controlled dispensing
The versatility of the Adaptor Cap allows unlimited choices for closure, size, shape and finish
Create a custom package without the custom price
A proven container for beauty, health and chemical products
©2017 Carow Packaging, Inc.. All Rights Reserved.


text:
Free Shipping Over $75* Clearance Items - Save 30% or More Why Shop Eurway.com?
• Chrome base + footrest• Tufted leatherette upholstery• Swivel• Height adjustable
The Callum Gray Adjustable Stool has contemporary and transitional elements incorporated into its design. This modern adjustable stool features padded, tufted leatherette upholstery with armrests, and a pedestal style chrome finish adjustable height base with built-in footrest. It is suitable for use at both bar and counter height tables. The Callum Gray Adjustable stool will add a cozy and stylish seating option to your bar, kitchen or dining area.
Learn more about stool heights with our bar stool buying guide.
Price: $117.00
Price: $424.00
Price: $285.00
Price: $546.00
Price: $398.00
Price: $92.00
Price: $430.00
Price: $172.00
Price: $126.00
Price: $139.00
Price: $337.00
Price: $203.00
Price: $159.00
Price: $308.00
Price: $554.00
Price: $259.00
Price: $453.00