text:
Monday, January 19, 2009
No-Knead Ciabatta - Bread You Can Believe In
It was the perfect marriage of a crisp, light crust outside, and a chewy, yet tender inside. The no-knead part is just a bonus, and only adds to the perfection of this loaf. As you'll hear in the video, I'm a bit under the weather, but even at half-speed this was a simple and enjoyable task.
All I will say is you really need to make this bread. Pretty soon we'll be thinking of romantic, sexy recipes to seduce our Valentines with. Keep this video in mind, for what could be better than having someone bake you a fresh loaf of Italian bread, then slowly buttering and feeding you a still warm slice?
Sorry, I think I took too much cough medicine. Enjoy!
4 cups bread flour (I used 3 1/2 cup white and 1/2 cup wheat)
*Note: you can use All-purpose flour if you want
1/4 tsp yeast
2 cups water
1 1/2 tsp salt
459 comments:
1 – 200 of 459 Newer› Newest»-
So, how do you spell what your family calls the end of the loaf? That part we always called the heel. I can't quite understand what you're saying.
Anyway, I've made the first no knead bread many times and I always get this open mouthed reaction,"You MADE that?" Thanks for this recipe.
By the way, I've let this bread rise as long as 2 days and it's still great.
Thanks again!
Jackie - January 19, 2009 at 9:55 PM
- Chef John said...
it's hard to spell phonetically, it's sort of like CON-DOHTZ or CON-DOATS
- January 19, 2009 at 10:10 PM
Love the bread but also had to tell you I bought, on line, a pair of the MOZO shoes for my 41 year old son for Xmas. He loves them and very impressed that they are "all" leather, very rare these days. Look good enough to wear anywhere, to any function and so very comfortable. If anyone of your followers wants a great shoe go into the MOZO shoes website. Thinking of getting a pair for myself.
- January 19, 2009 at 10:16 PM
That does indeed look like a magnificent loaf of bread. I will try and make it this weekend. BTW, my family always call the end of the bread 'elbow.' I guess it makes sense.
- January 19, 2009 at 10:30 PM
Yup. Nasal congestion always turns me on.
- January 19, 2009 at 10:58 PM
'Condotte' apparently means 'pipelines'. Not sure how that applies to bread.
Would this recipe work if I halved the ingredients? Would the baking time also have to change? - January 20, 2009 at 3:35 AM
- Nate @ House of Annie said...
"strandified" LOL
How you doin'?
That's an absolutely beautiful bread. I think I'll try it out for dinner this Saturday!
So, it's not essential to weigh the ingredients out for this recipe? - January 20, 2009 at 4:07 AM
- Chef John said...
doing well, how are u guys? I dont weigh, that's why I a bad baker! This is a foolproof dough, no need to weight unless you want to.
- January 20, 2009 at 4:12 AM
- Chef John said...
you can halve, will cook about the same time. a little less
- January 20, 2009 at 4:14 AM
I love bread - but I've never made it. Now you, and your sexy voice, have inspired me to try. I am really afraid if I am successful, that by Valentines Day I will weigh an additional 10 lbs. Yikes! This is not a pretty thought!
Our family refers to the end pieces as the crust. Since there's crust all over the outside of bread I have no idea why we say it about only these two slices. - January 20, 2009 at 4:18 AM
- Chef John said...
"by Valentines Day I will weigh an additional 10 lbs." more to love
- January 20, 2009 at 4:40 AM
- PrimeBrit said...
Room temp to me is about 72 at this time of year, (Florida). Is this still a good temp? - January 20, 2009 at 7:29 AM
- Chef John said...
thats fine
- January 20, 2009 at 7:46 AM
- Pyrofish said...
I'm curious. I've made the no-knead several times. The first time I made it, it went for 18hrs and 3hrs on the second rise. It came out spongy and moist, my favorite loaf so far.
Then you did one, and said 12hrs for the initial rise, so I figured it probably doesn't matter as long as it's between the two times. However, I have never reachieved that same spongy moist bread as the first one. I had attributed it to everything from temp, to yeast, to amount of water, but could not get it again.
My question is, do you think it's the time, or the amount of water that gives it it's ciabatta-ie goodness?
Thanks for any guidance, and hope you feel better. - January 20, 2009 at 10:08 AM
- Chef John said...
our breadheads can chime in, but I think wet dough is the biggest factor, although the longer wait probably develops more gluten, so that also's a factor.
- January 20, 2009 at 11:41 AM
- Minichef said...
OMFG;; that bread its so sexy, but chef i read about never put directly the yeast with the salt beacause the salt kill the yeast and in your video you do that?
and a question,
¿like i use fresh yeast and i dont want to buy the dry one, how many i have to put of fresh yeast in this recipe, thanks chef for this recipe, - January 20, 2009 at 5:45 PM
- Chef John said...
first, watch your language!
second, did it look like it killed the yeast?
third, I've never used fresh yeast so I'm not sure.
I'm no baker, but the recipe as shown works beautifully, alter at your own risk! ;) - January 20, 2009 at 5:58 PM
- Unknown said...
Hi Chef John,
I've got an oven that can bake with steam - do you think it's worth a try or should I rather bake it without the steam function? - January 20, 2009 at 7:43 PM
- Chef John said...
i would try it. I always have a pan of water in the oven.
- January 20, 2009 at 7:47 PM
- Greg said...
I represent a consortium of Italian carpet slipper manufacturers and we are outraged by your denigrating our fine products.
- January 20, 2009 at 8:57 PM
- Minichef said...
oh sorry chef for my language i forget that.so but that recipe its so c00l im gonna tried this tomorrow.
and thanks for the answers, i never wanted to be rude with you
thousands sorrys chef.
and.. last question of today,
like i dont live on uniteed estates i dont know about the cornmeal, in wikipedia says what with thecornmeal is made the tortillas, but... the flour what is made the tortillas isn't is like yellow.
can you help please chef? - January 20, 2009 at 9:39 PM
- Chef John said...
cornmeal is a course grind and corn flour is much finer. you can use flour if u have to. btw i was kidding
- January 20, 2009 at 10:25 PM
- soygreentlatte said...
This looks delicious - thank you for sharing! One question: do you think I could make this with whole wheat flour? Thanks!
- January 20, 2009 at 10:47 PM
- Chef John said...
sure, it will just be wheatier.
- January 20, 2009 at 10:51 PM
Hi Chef John,
I love all your bread recipes and have been dying to test them out! However, I cannot seem to locate corn meal where I am located. Would it be ok to just sprinkle the baking pan with regular flour? - January 21, 2009 at 4:22 AM
Is the only difference between regular no-knead bread and ciabatta the fact that this dough is moister?
- January 21, 2009 at 9:12 AM
- Chef John said...
I think they are the same except I called it ciabatta! ;) They both have the same flour water ratio.
- January 21, 2009 at 10:14 AM
- Chef John said...
the longer flatter shape technically makes it a ciabatta
- January 21, 2009 at 10:15 AM
- Chef John said...
sure, or just use a silicon baking mat. The cornmeal just adds some extra crunch to the bottom crust.
- January 21, 2009 at 10:17 AM
Polenta or grits could be used if cornmeal is not availbable.
Luisa Vacaville - January 21, 2009 at 10:52 PM
- maho said...
Hey, how're you doing? (Don't have a cold, by the way, so won't sound as sexy as you do)
Love the way the bread puffed up in the oven!
Could you be kind enough to tell me what kind of white flour you used for this batch? All-purpose or bread flour?
I've made many batches of no-knead bread, but seem to get varying results depending on the type of flour i use. What do you recommend? - January 22, 2009 at 4:28 PM
- Chef John said...
I know it sounds crazy, but I like bread flour for bread. But, I've use both kinds and had success,so I've not noticed a huge difference.
- January 22, 2009 at 5:01 PM
- maho said...
Wow..., that was fast! Thanks for getting back to me so quickly.
Yes, I prefer bread flour too, as the extra protein/gluten seems to add more chewiness.
I will definitely try this recipe with bread flour.
Thanks once again! - January 22, 2009 at 5:08 PM
I just dumped the dough out of the pan onto the plastic film, but I forgot to flour it first. So I tore another piece of film, floured it, then got most of the sticky dough to release from the first one. When I tried to move the loaf to the pan, using the film, it folded in half and stuck to itself. I opened it, and tried to piece together the top with some of the dough that was still stuck on the film. What a mess I've got going here! My raw loaf looks like a patched wall. While it's "resting" during these next the two hours, I'm hoping it heals itself so the patched marks aren't so evident, and although it's before noon, I think I'll have a glass of wine. I'm a nervous wreak. (more of my disastrous results to follow...) Maybe I send you a picture of the results. Maybe not.
- January 23, 2009 at 2:37 PM
- Chef John said...
nervous wreak? you do realize you're just making break, right? You're not defusing a bomb. The wine may help.
- January 23, 2009 at 3:30 PM
Wreck is what I meant say, (wreak means to bring havoc - so that fits, too) Anyway, defusing a bomb is a good description of my bread making attempt this morning. It's in the oven now, and my fingers are crossed. Maybe my bread will be "the bomb," and I think that's a good thing?
- January 23, 2009 at 4:31 PM
It's done. Not so bad after all, but lots of room to improve. I used all unbleached flour, so next loaf I will try following the recipe exactly. How do you make it taste like sour dough bread?
I took some pictures, but don't know how to include a photo in your comments. And, you were right, it wasn't something to get all worked up over. It was fun, and as soon as I get to the store and buy wheat flour, I'm making another. No wine before the loaf is done, next time. - January 23, 2009 at 5:34 PM
- Chef John said...
not sure about the sourdough unless you use a sourdough starter. email the photo and maybe i'll post it if it's not too embarrassing.
- January 23, 2009 at 5:37 PM
- Connie T. said...
You inspired me to make the bread so I clicked on the video and it says sorry this video no longer exists. Do you have it posted somewhere else? Did you take it off?
- January 24, 2009 at 12:03 AM
- Chef John said...
looks like its fine.
- January 24, 2009 at 12:41 AM
Some ciabatta recipes call for olive oil. Would this method jive well with a tablespoon or two of olive oil in the mix? Anyone tried it?
- January 24, 2009 at 6:41 PM
- Chef John said...
OO won't hurt anything, but will it help?
- January 24, 2009 at 7:49 PM
Not sure, but I'll divide the recipe into two bowls, one with and one without OO. I'll report back to you tomorrow evening.
- January 24, 2009 at 8:12 PM
Having never made bread but inspired by the stories and videos here, I just made this loaf. Must have messed up the flour/water ratio (though I swear I followed the recipe) as my dough was very wet (not sticky wet, damp wet). Even after the first rise (which was beautiful) it was so soft that it "ran" all over my baking sheet. Ended up being less than 1 inch high, and about the size of a large baking sheet. Yummy taste and texture not too bad but I'll cut the water back to 1.5 cups next time.
Thanks for making me believe I could make bread Chef John! - January 25, 2009 at 7:59 PM
Food wish:
No-knead bagels? :) - January 25, 2009 at 11:24 PM
- Connie T. said...
The video works now, so I am going to make the bread. I will take a picture of it tomorrow when I am done.
- January 27, 2009 at 1:12 PM
- Unknown said...
Thanks so much for these no-knead recipes, Chef John. I've now made your chicken Parmesan, pizza, your wings, the slider burgers. They've all come out extremely well, and all my friends now think I'm some kind of great Chef.
Hooray for deception! - January 31, 2009 at 4:19 PM
- Unknown said...
Chef John, if you don't mind I've got another question.
In the recipe it says white flour and wheat flour - I'm a bit confused.
In Germany "white flour" is wheat flour - what is yours?
Do you mean by wheat flour whole grain wheat flour? - February 5, 2009 at 8:07 PM
- Chef John said...
not sure. I used regular un-bleached white flour and what the package says is "Whole Wheat Flour" not sure if its whole grain (i don't think so).
- February 5, 2009 at 8:09 PM
- JangMa said...
i use to think that it is a drag to make this !
but u helped alot ^. -
fab blog@ - February 9, 2009 at 1:43 AM
Hi Chef, thanks for the recipe! I just begin learning to bake bread. I tried your recipe and I got a loaf of similar bread like that of yours--almost the same color, and texture. However, I noticed that the bread I made got a very very hard crust, it's as hard as a stone.I bet I could kill birds with it. I know that there should be a bowl of water in the oven beneath the loaf when it's being baked. I did the same. But it seems not to soft the crust. Can you tell me if it's normal? If not, how can I improve it? thanks a million.
Tony form China
PS. Sorry for the anonymousness. I can't wait for the answer~ - February 9, 2009 at 3:11 PM
- Chef John said...
yes, hard crust is normal, but usually softens once it sits for a while. The water is not to soften the crust, its to humidify the oven. Thanks!
- February 9, 2009 at 4:28 PM
Hi John, good news, I made another loaf and succeeded!! After the loaf cooled down, I got the wonderful brown, crisp crust outside and soft,moist texture inside! Thank you for your answers! Baking bread is really art!
Tony from China - February 10, 2009 at 12:04 PM
Chef, do I use all bread flour omitting the wheat? I love fresh baked bread and want to try this recipe.
- February 12, 2009 at 8:44 PM
- Chef John said...
yes, all white flour is OK
- February 12, 2009 at 10:00 PM
Chef John,
whatever breadk I try to bake, my bread just wont brown. Is there something that can be done with it? I use a conventional oven.
Bhanu - February 15, 2009 at 2:28 PM
- Chef John said...
no idea. if the oven is the right temp (and accurate) then the bread has to get brown.It can't not get brown. test the oven temp.
- February 15, 2009 at 3:04 PM
hi chef john! im new to baking and may i know what kind of yeast u are using in this recipe? active dry or instant?
- February 23, 2009 at 5:04 AM
- Chef John said...
just basic dry active yeast.
- February 23, 2009 at 11:13 AM
- Chef John said...
just basic dry active yeast.
- February 23, 2009 at 11:13 AM
hi chef, if i wanted to add olive oil into the recipe do i need to cut down on the amt of water? thanks!
- February 23, 2009 at 9:59 PM
- Chef John said...
no, its the same
- February 23, 2009 at 10:35 PM
do i have to use cornmeal at the bottom when i cook
- March 4, 2009 at 5:47 PM
do i have to use cornmeal at the bottom of the pan when i bake?
- March 4, 2009 at 5:48 PM
- Chef John said...
it keeps it from sticking and makes a nice crust. I've never tried without, and won't.
- March 4, 2009 at 6:20 PM
ok thank you very much for the info and fast reply
- March 5, 2009 at 5:06 PM
- Clararar said...
I baked this today and it was absolutely awesome! I used 3 cups of white and 1 cup of wholemeal flour, and it was really really good... have posted the photos on my facebook in case you haven't already seen it.
Basically, all thanks to you everyone thinks I'm an amazing cook, so... keep those videos coming! :) - March 6, 2009 at 11:05 PM
- Chef John said...
I just took a peek...fantastic!
- March 6, 2009 at 11:21 PM
Hi Chef, can you use your no knead dough recipe for making cinnimon rolls if you stretch it out or roll it flatter? The nice gooey kind lathered in butter and cinnamon and pecans? Or is this not the right type of bread dough for that purpose?
- March 7, 2009 at 12:13 PM
- Chef John said...
would taste fine, but not the same as those doughs have eggs, milk, etc. I've never tried those with the non-knead method.
- March 7, 2009 at 1:59 PM
- hajo said...
Hi John,
First of all thanks for the great recipe.
The ends of bread are called kontjes in Dutch, which would translate to butts/buttock in english. We also put butter on our bread :-) - March 9, 2009 at 6:17 PM
- Super Chicken said...
Thanks for this no knead bread Chef John! I've made it a few times now and it's great!
- March 11, 2009 at 4:26 AM
- Peregrine said...
Looking close at the video I see a pan in the oven under the bread which I assume has water in it.
Please up date the audio to include that detail it makes a world of difference.
I am making second batch and am using 3 AP flour and 1 semolina.
Should be good. - March 15, 2009 at 6:23 PM
- Unknown said...
Dear Chef John,
What's the mininum salt I need to add without impacting the texture of the bread? I am watching my salt intake carefully. - March 18, 2009 at 11:02 AM
- Chef John said...
salt is only there for taste, not texture
- March 18, 2009 at 11:52 AM
Does it matter if you use a convection or conventional oven? Which would be better?
Also, if you brush cream over the dough before you put it in the oven will you get a softer crust?
Thanks. - March 24, 2009 at 8:31 AM
- Chef John said...
i don't use convection, so I don't know. The cream would make for a darker crust, but not sure about how hard it would be. You should try and report to us.
- March 24, 2009 at 10:25 AM
- LANA said...
Hello John,
The bread looks BRILLIANT. I want to bake it right now. But I have fresh yeast only. How much fresh yeast should I use? Does it make any difference? I dont have cornmeal also, so may I replace it with something else? Thank you so much for sharing this. - March 28, 2009 at 3:26 AM
- Chef John said...
no sub for cornmeal - get some
also, google "fresh yeast dry conversion" ty - March 28, 2009 at 10:36 AM
I baked a half-size batch of this bread today and it was fantastic! I have horrible luck making kneaded bread (comes out tough or way too dense), but with this I finally tasted bread success :) I didn't realize before that you were using active dry yeast so I used instant instead and it worked fine. I think you are supposed to use less yeast when using instant but it didn't seem to make a difference for me.
I can't wait to try this sliced horizontally for a sandwich or panini. Thanks so much for this recipe! Tomorrow I'm making the no-knead pizza dough too! - March 28, 2009 at 10:15 PM
- Chef John said...
you make me happy
- March 28, 2009 at 10:29 PM
- dehadista said...
You sound sexy Chef!
And so as the bread.
I'll try this when go back to work.
Thanks chef John! - April 1, 2009 at 1:00 PM
I ended up with a whole down the center of the bread, cooked great both above and below, but seemed to separate down the center with a large air pocket. Thoughts?
- April 10, 2009 at 2:55 AM
- Chef John said...
no way to know... try again
- April 10, 2009 at 2:57 AM
- Unknown said...
This is a great recipe. I have made it twice now, and it is far and away the easiest to bake Ciabatta I have found.
I modify the recipe - and use all white flour, but for a handful of rye flour to give the dough a bit of bite. The flavour is amazing.
I do have one question - the loaf is really, really big. Have you or anyone tried splitting the dough in two prior to proofing to make two smaller loaves? Would the recipe need to change?
I do notice that my loaves tend to get the nice big holes in only the top half... the bottom half of the loaf always tends to have a tighter crumb with much smaller holes. Is this to do with the weight of the dough? Would a smaller loaf help with this, or am I doing something wrong? THe flavor is still good throughout, I would just prefer a more consistently holy loaf!
Great recipe!
GG from New Zealand - April 12, 2009 at 6:52 AM
- Chef John said...
not sure about the holes, but you can make 2 loaves no problem, same recipe. maybe cooks a little faster.
- April 12, 2009 at 12:28 PM
- Peregrine said...
I have made this twice and it is now my favorite "rustic" bread. I can't wait to try the "no knead" pizza dough.
I need to take lunch to work and I have been scooping out 6 equal portions of the dough onto two 1/2 sheet pans with parchment paper.
It makes 6 large tastey sandwich or panini rolls. - April 13, 2009 at 2:26 PM
- Chef John said...
that's what im taking about!
- April 13, 2009 at 2:55 PM
- Peregrine said...
So chefyou have shone us "no knead" ciabatta and pizza dough.
Can this technique be used for focaccia? - April 15, 2009 at 4:55 PM
- Chef John said...
im sure it can, but I haven't tried it yet. It's on the (long) list.
- April 15, 2009 at 6:04 PM
- morning turtle said...
Chef John, thanks for the recipe! When I try this out, I'm thinking about poking some cloves of garlic into the loaf before the 2 hour rise, do you think this would work?
- April 18, 2009 at 3:09 PM
- Chef John said...
sure, or just eat it with garlic and save a step. ;-)
- April 18, 2009 at 5:49 PM
Hello Chef, thanks for the great video--My dough is on its last 2 hours of rising and i cant wait to try it.
Could i make this dough in advance and keep it in my fridge to bake say within a couple of days or must it be after the 20 hours (total)? - April 23, 2009 at 6:21 PM
- Chef John said...
should be OK
- April 23, 2009 at 6:40 PM
Hello again Chef! I had very good success with the Ciabatta, it was very good and me and my friends had a hard time not eating it all in one sitting--I ended up saving some of it and i put it inside a tupperware--I was wondering... is it normal for the crust to soften up after its been sitting? Any way the crust will stay crusty?
- April 25, 2009 at 10:32 PM
- Chef John said...
yes, it is normal for the crust to soften up. enjoy
- April 25, 2009 at 11:10 PM
Anonymous said...
I ended up with a whole down the center of the bread, cooked great both above and below, but seemed to separate down the center with a large air pocket. Thoughts?
April 9, 2009 11:55 PM
Same thing happened with my bread. - April 30, 2009 at 7:31 AM
I've been making this bread for a while now and I have found out a couple of things.
1. Forming the ciabatta on a flexible polyethylene cutting sheet makes it much easier to transfer to the baking pan. If you don't have one, they're really cheap and useful. I suppose parchment paper might also be an improvement on the limp, sticky plastic wrap.
2. Different flour and yeast can yield markedly different flavors. I ran out of yeast and wheat flour about the same time and replaced both with different brands. The original combination, Red Star yeast and store-brand flour, made a much smellier (and tastier) fermentation than the replacement, Fleishman's Active Dry yeast and King Arthur whole wheat.
3. Weighing the flour is preferable if you have a scale. By my experience, you need a total of 20.5 to 21 ounces of flour to make a dough that looks and handles like Chef John's. (The variation is based on the weather. Today we have pea-soup fog and I used 21 ounces.) - May 17, 2009 at 12:38 PM
I just discovered your blog and I love all your videos and recipes...Thanks
- May 20, 2009 at 9:03 AM
- Unknown said...
I read so much where folks say to never use metal instruments or mixing bowls for bread... yet you do constantly and yours turn out terrific!! What's up with that?
- May 24, 2009 at 9:55 AM
- Chef John said...
I just don't have any large glass bowls, and yes, I've never had a problem.
- May 24, 2009 at 1:01 PM
hi Chef
i made this and mine wasn't "airy. more spongey inside. what did i do wrong? still tastes good, just not the texture i expected - June 23, 2009 at 11:04 AM
- Chef John said...
it's supposed to be chewy and spongy, not dry and airy
- June 23, 2009 at 12:55 PM
- Unknown said...
Hi chef! I love all your recipes on this blog (: This bread recipe really caught my attention though, i've always wanted to try making bread!
So i actually tried this recipe out last week, following your exact ingredients and i had a problem with the results... My finished loaf of bread had no taste lol! So i was wondering if you used a measuring tool for the salt, or did you just use a regular teaspoon without the leveling off and all... because i actually used an exact measurement of a teaspoon, leveling it off and everything!
I'm in the process of a 2nd attempt right now. I mixed in the ingredients for 1/2 a batch and this time i added 2 teaspoons of salt (accurate measurement once again..) i'm at the 18 hour waiting stage right now and i have a feeling i still didnt add enough salt, lol!
Thank you for all your great recipes! (: - June 27, 2009 at 11:06 PM
- Unknown said...
Oh! i'm sorry chef, i also forgot to ask you how long you would recommend me to bake the 1/2 batch? :O Thanks for your time!
- June 27, 2009 at 11:10 PM
- Chef John said...
I usually just grab a big pinch with my fingers, not an exact science. I have measured exactly before and leveled it off for the written recipe, so not sure. Maybe you are expecting something that this bread isnt? Many rustic Italian breads have no salt. But, if you look at lots of bread recipes the salt amounts are pretty much what you see here.
- June 28, 2009 at 12:40 AM
- Chef John said...
about the same time, maybe a lit less. BTW, remember people's taste for salt varies greatly. You may be what's called a super-taster
- June 28, 2009 at 12:43 AM
- pan-aho said...
Thank you for sharing your expertise w/us, Chef John. I just need a little more help. You said this dough needed to rise 18 (!) hours and mentioned a room temp of around 65 degrees. Wish that was the kind of temp I'm experiencing, but try 90 during the day and 80 - 77 at night & early morning. How long should the rise be then??? Will be awaiting your answer then it's bake away!!!
- June 28, 2009 at 3:54 AM
- Chef John said...
it just has to double in size
- June 28, 2009 at 4:52 AM
Hello Chef John,
what type of yeast are using or recommending.
Garry. - July 6, 2009 at 7:26 AM
- Chef John said...
any dry active yeast works, all the same. think it was fleishmans
- July 6, 2009 at 10:54 AM
- David said...
Hey Chef John,
First of all this is a great recipe, I've already made it a couple of times before. My question is this, how does this recipe change if I wanted to actually wanted to knead it (i know, i know, it's no longer "No-knead Ciabatta")? Do I just use a full packet of active dry yeast and knead it for like 10 min then let it rise until it doubles in size (maybe about 1.5 hrs)? Really what I'm most curious is the moisture, do i need to use more or less water, etc.?
Thanks in advanced,
Dave - July 20, 2009 at 8:46 PM
- Chef John said...
not sure how I would adapt this. I would probably look for a standard ciabatta recipe to follow.
- July 20, 2009 at 8:56 PM
- Flour said...
This recipe is awesome! My first attempt at ciabatta bread was a success...Thanks Chef John:)
- July 21, 2009 at 12:02 PM
- Van said...
Hi Chef John,
I've made this recipe a few times and was wondering if there is an easy way to get a taller result? I was thinking about trying a more confined bake pan and seeing if the bread gets more of a vertical rise. Any suggestions?
Thanks a lot , great recipe. - August 6, 2009 at 8:34 PM
- Chef John said...
u can try, but i say just let it be the shape it wants!
- August 6, 2009 at 10:20 PM
How do you recommend storing the leftovers with this bread? Plastic bag it in the fridge or just cover it on the counter? I guess I should rephrase 'if there's leftovers.'
Thanks Chef John - August 8, 2009 at 1:30 PM
- Chef John said...
i use a plastic bag
- August 8, 2009 at 2:35 PM
Hi Chef,
I've tried several times making the bread and the dough never looks like in the video. in the video it seems a bit firm when you handle it. i always get a liquid dough that almost doesn't rise and is impossible to work with. i use measuring cups and spoons, so i don't think its the quantities. maybe its the room temp? its the middle of the summer here. if it is, what do you recommend ?
Benny. - August 15, 2009 at 12:16 PM
- Chef John said...
bread is all feel. If it's too wet to work with add more flour at the beginning.
- August 15, 2009 at 12:18 PM
Hi Chef John,
Just wanted to say thanks for the fast reply. I did as you said and added more flour (1/3 of a cup did the job. Thanks to you i'm becoming famous around friends and family for my bread making.
Thanks again,
Benny. - August 31, 2009 at 1:04 PM
ive tried making this recipe twice and both times it didnt rise when baking. the dough looks exactly like the video so what am i doing wrong. Could it be my oven is too hot/too cold?
- September 2, 2009 at 2:17 PM
- Chef John said...
I assume you are using the same temp as me for the oven, so I have no idea!
- September 5, 2009 at 1:45 PM
- papilunas said...
Wonderful bread John! I've been making bread for the past 40 years and this one is the best and easiest I have ever made, thank you for the recipe.
In Andalusia, Spain, where I'm originally from, we call the heel of the bread "canto" which, phonetically sounds very much like the way you pronounce it. In my impoverished Country, after the Civil War and W.W.II, a canto of bread to which we made a hole in the center and filled it up with olive oil, was a real treat... - September 27, 2009 at 5:21 PM
- Tina Vesić said...
- This comment has been removed by the author.
- October 11, 2009 at 6:31 AM
- Bob said...
Tried this bread. After 30 years of baking bread I should have known better. 18 hours created glop. Could have used it to start sour dough starter but ciabatta. No way.
- October 15, 2009 at 1:05 PM
- Chef John said...
bob, you gave up! did you see the video? It's supposed to be glop. Did you see mine? You just got scared and stopped and missed the magic. DO you think we all faked these loaves to mess with people? People have sent dozens of photos to me u can see on the site. Stop thinking and make this bread
- October 16, 2009 at 12:54 AM
- Julie Lopez said...
I grew up in Sicily, and a few times a week we would walk to the meat market and get prosciutto and provolone panini on ciabatta ... and I have been trying for over a decade to make the real deal. I have tried many a recipe and I have never found the right one. And now, sitting on my stove is a bowl with a beautiful "blob" of dough that I have to wait what, 20 or so hours until it is out of the oven ready to eat! I hope it turns out as beautiful as yours looks, if you have given me back my "meat market panini" I will love you until the day I die! (And I am young.. ish) :o)
- October 19, 2009 at 11:09 PM
- Julie Lopez said...
BEAUTIFUL!!! OK this wasn't the same exact texture I was wanting it to be, I wanted the inside to be a bit more chewy(maybe if we had let it set a few minutes it would have helped, we had it eaten within minutes of it coming out of the oven). It was such a wonderful bread that I have another batch rising... I think the thing I loved most about it, it is completely do-able, with as simple and mess free as the recipe is I will make it a few times a week at least. Thank you for sharing it!
- October 21, 2009 at 9:12 AM
I love this bread, but would like to get a bit more tang, like sourdough...do you think I could add half the liquid in the form of greek yogurt?
- November 8, 2009 at 11:36 PM
- Chef John said...
half may b too much, maybe 1/3
- November 8, 2009 at 11:46 PM
- Bogey Man said...
I used Gold Medal all-purpose flour and the loaf seemed to be flatter than when I used bread flour. I switched because Safeway had a sale on Gold Medal All-Purpose ( 5 lbs for $1.50, it's still on sale). The height of the finished loaf is only about 2" high. When I used bread flour it was much higher.
Suggestions please.............. - November 10, 2009 at 11:34 AM
- papilunas said...
Bogey Man, stop using all purpose flour. I always use unbleached flour from Wheat Montana and I grind hard winter wheat berries, also from Wheat Montana, for the whole wheat mix and my loaves rise wonderfully.
- November 10, 2009 at 5:48 PM
- Bogey Man said...
The recipe on top of this page states:
4 cups bread flour (I used 3 1/2 cup white and 1/2 cup wheat)
*Note: you can use All-purpose flour if you want
1/4 tsp yeast
2 cups water
1 1/2 tsp salt - November 10, 2009 at 6:50 PM
- leen sturtewagen said...
can you make a sourdough version of this bread? and how much starter would you need?
- November 11, 2009 at 8:18 AM
- Unknown said...
Hi Chef John,
I've recently discovered your blog and love it!
I have a question that you may not be able to answer but here goes. So I don't have a proper oven but a large-ish toaster oven, my fear is that the bread will burn before it gets to fully bake. So the question is can I bake it on a lower heat for longer?
Thanks. - November 13, 2009 at 11:09 AM
- Unknown said...
Ok so I was way to eager to wait for an answer and made my bread anyway. I ended up baking at the same temp for 45mins and just covered it with foil for a bit so it wouldn't burn. It turned out really well but the crust was really hard, perhaps i should've baked a bit less? I also only did half quantity.
- November 16, 2009 at 2:40 AM
- Chef John said...
sorry, traveling thus week, hard to keep up. Glad it came out. I like thick crust, and it will soften after a day.
- November 16, 2009 at 2:45 AM
- Unknown said...
No problem, figured you must be a busy man. I love a thick crust too was just wondering if I did something wrong. Thanks for the reply.
- November 16, 2009 at 2:56 AM
Just baked this and it's wonderful. Just curious though....can this be put into a bread loaf pan? If so, I'm sure I'd have to grease and cornmeal all sides right?
- December 10, 2009 at 5:43 PM
- Chef John said...
Never tried a loaf pan. May not work. Only one way to find out.
- December 10, 2009 at 5:46 PM
I baked today no-knead ciabatta with grounded oat (1 cup oat, 3 cups wheat). It's delicious, even better than than rye/wheat ciabatta. Thanks for the recipe!
- December 13, 2009 at 9:39 AM
- Ummuzulfa said...
the flour - is the the high protein or plain wheat flour?
is it OK if I use instant dry yeast?
Many thanks in advance - December 13, 2009 at 10:09 AM
- Bogey Man said...
I love this bread. Now on my 20th loaf at least. I would like to be able to cut it in my bread slicing gizmo, but the loaf is too wide. I found a loaf pan on Amazon that measures 16 X 4 X 4.5 and also one that is 14 X 6 X 4.5. I imagine the latter would be the one to use.
But before I order it I am checking if any one had any experience doing this? - December 13, 2009 at 2:45 PM
- coconomad said...
I have made this recipe on three different occasions, over the last year, and every time it is an ABSOLUTE success. I feel like an Artisan Baker has been to my house and then I realize it's me. Thank you for de-mystifying the process.
- January 9, 2010 at 11:10 PM
- Peregrine said...
This has become my favorite bread.
I "brown bag it" to work and my fellow workers are always envious.
I am now going to try to make proscutto bread by flouring lightly cooked proscutto pieces and mixing them in at the last minute before baking.
Will let you know how it works. - January 9, 2010 at 11:50 PM
- Jana Darrington said...
Chef John, I wanted to include your No-Knead Ciabatta bread in a little recipe booklet for a class I am teaching on soups and breads. I will give you credit and also reference your website/blog in the booklet. Can I have your permission to use this recipe in this way? By the way, I love it! So easy and beautiful! Everyone who has tried it has said it was delicious! Thanks,
Jana Darrington
FCS Agent
USU Extension - Utah County
100 E. Center Street, L600
Provo, UT 84606
801-851-8468 - January 15, 2010 at 6:06 PM
- Chef John said...
Sure, go for it! thanks!
- January 15, 2010 at 6:12 PM
Dear Chef,
I have never baked bread before but am eager to learn. Could you please explain about the water in the bowl, that is to be kept in the oven? How much, what kind of bowl & so on...
Thank u!
EXL - January 18, 2010 at 4:53 PM
- Chef John said...
the water just keep the oven humid and help form the crust. Just put an inch of water in a pie pan and you're good to go. enjoy!
- January 18, 2010 at 7:33 PM
- pan-aho said...
thank you for what you do ... you're one of the best in my book! Happy New Year! [it's still January ...]. wanted to tell you that reading your interactions w/your followers always makes me smile ...thank you much for being so patient w/all of us!
- January 18, 2010 at 8:12 PM
- RedRum said...
Hello Chef, love your stuff. I know that proper italian ciabatta has a bit of olive oil in it (my granpa was a baker). Have you tried it with some olive oil?
Thanks - January 20, 2010 at 5:23 PM
- Chef John said...
i have. i make it lots of different ways
- January 20, 2010 at 6:50 PM
Just made the dough. Can I use a pizza stone to cook it on? If so do I need the corn meal?
Lover your site.
Tammie - January 21, 2010 at 1:07 PM
- Chef John said...
yes, and yes!
- January 21, 2010 at 1:14 PM
- Chef John said...
yes, and yes!
- January 21, 2010 at 1:14 PM
- RedRum said...
Thanks Chef, I made it without olive oil to be consistent with the recipe and it turned out great! It is missing the bit of pepperines that a good olive oil brings, so tomorrow I am making it with oil. Any suggestions on the proportions of water and flour if I use 4 tablespoons of oil? Thanks Chef, I love your site and your recipes. Just to let you know, I proposed to my wife a yer ago, after cooking a meal, which I finished with your molten chocolate cake ;)
- January 21, 2010 at 7:47 PM
- Eliza said...
Hi, Chef John. I'd like to make a few small ciabattas with olive chunks. At which point can i split the dough and when do i add the chunks? Thank you very much.
- January 23, 2010 at 4:41 AM
- Chef John said...
after the first rise
- January 23, 2010 at 4:44 AM
- Fungirl said...
Hi John - My fist Ciabatta is cooling on a wire rack in the kitchen a I write this. Wow! Just a few years ago, I didn't even know what a Ciabatta was, and today I made one, thanks to you. I thought about it a lot before going in, and decided that I could shape it on a Silpat pad on a cookie sheet rather than on plastic wrap. That worked out wonderfully, so I do recommend doing it that way. Thanks again for yet another great recipe and video!
- February 4, 2010 at 2:41 PM
Hi chef john! i just made my bread and it was awesome! im not a baker cause i hate to measure but this i will take the xtra step and get my measuring tools out! its amazing and just like my mom makes without the hard work of kneading for hrs! lol Only thing i might do is add more salt and throw in some caraway seeds to give it the rye bread feel since im from europe its all about the rye bread in my house! THANK YOU THANK YOU for this recipe! now i can enjoy my "moms" bread!
Do you have a cookbook out?? if you dont and plan on doing one then make sure theres pics of all the food i only buy cookbooks if theres pics in it lol! thanks! - February 6, 2010 at 5:47 PM
- pan-aho said...
wanted to say a huge THANK YOU for this blog. reading your answers always brings a smile ...
- February 9, 2010 at 3:39 PM
Chef, what will happen if i leave it to rest up to 24 hours? is that still okay?
- February 17, 2010 at 12:38 AM
- Chef John said...
not sure, should be as long as its not too warm
- February 17, 2010 at 12:53 AM
Chef, after two failures with other ciabatta recipes, I tried yours and it worked! Only thing, my bread did not rise as much as yours. I know it is not supposed to be real high. The bread is delicious, crunchy crust and soft on inside; however, the holes are very small. What did I do wrong?
- March 10, 2010 at 5:17 PM
- Chef John said...
nothing was wrong. Keep making it and it will be a little different every time.
- March 11, 2010 at 12:12 PM
- Helen said...
Divine. The best white bread I've ever made. Just awesome. In Estonia we have the tradition of making 100% rye bread - that's what we call "bread". You know, with sordough. I'll send you a picture.
- March 27, 2010 at 8:52 AM
Wow! Just made the bread, and it all turned out exactly as you said, from mixing the dough to forming the loaf to eating the delicious thing!! We live in Denver, so I was worried that the higher altitude might have an adverse effect. It didn't, and we are enjoying slice after slice right now!
- March 28, 2010 at 2:01 PM
This comment if for Bhanu, that said its bread doesn´t get brown.
Remove your bread from the baking sheet 5 or 10 minutes before the baking time ends and turn it upside down on the upper oven rack.
I had the same problem and this worked just fine.
I apologize for my english but I'm writing from Guadalajara (land of Tequila)
I hope you can try this, good luck,
Claudia. - April 3, 2010 at 5:04 PM
Chef John,
Thanks for the wonderful recipe, i tried it and it came out well. Could you pls tell me the difference between sourdough bread and ciabatta, is it just the shape or the recipe is diff?? If the recipe is diff would you pls consider making sourdough bread, that will be great help for novice bakers like me.
Thanks in advance. - April 4, 2010 at 11:51 PM
- Adriana A. said...
I know this video was made some time ago but i'll still comment on it. I have always avoided making bread because it seems that it needs a lot of work and it can be ruined easily. The bread looked beautifull, can't wait to try it at home. Thanks chef!
- April 5, 2010 at 1:35 AM
- Jacob said...
So close but I failed!
I used slightly more wheat flour than you did, I did 3 cups AP 1 cup whole wheat.
I also threw in some dried herbs.
Everything was going wonderfully until I baked it. And looking back I realized what I did wrong. I put my oven at 450 instead of 425. The crust must of formed too early constricting the bread and stopping it from rising too much.
Do you think that's what happened?
The little flat bread I have taste great though. But very crunchy/crusty. - April 7, 2010 at 9:59 PM
- Chef John said...
no telling, bread is a mystery, make it a few more times and see what happens
- April 7, 2010 at 10:02 PM
Hello Chef John,
Just discovered your site and I must say then I spend the better part of the day yesterday on your site. Your stuff is amazing and I couldn't wait to try out the no-knead bread myself, so 18+2+cooking time later and I now have this amazing bread. The taste is wonderful and the crust is to die for, so thank you for a fantastic recipe, I can't wait to try out some more! - April 30, 2010 at 11:17 AM
I'd really love to try this bread ! Ever since a year ago when I did my first attempt at making bread I was very disappointed because after all the kneading and shaping and waiting of the dough - I took it out of the oven, it smelled wonderfull I was incredebly happy and...it was raw ! Yes perfect on the outside - raw on the inside. It's because of my oven - it is incredebly hot (even when I lower it !) and it's 100% NOT acurate...now everytime I bake something it has to be under the foil for the whole baking process and then I remove the foil and the top is done in like 5 minutes (this is on a lower then the heat that it's required ...)
The problem is that recently I made a traditional Bulgarian bread called pitka under a foil and it came out incredibly beautiful but with the texture of a carpet...but then again that might have happended because I let it rise for a whole day (with kneading) Something urgent came up :(
So I really want to make this no knead bread but I don't wanna wait 20 hours and then come out with somethig like a carpet...Because I AM going to use foil , there is no other way with my oven...it's either that or RAW bread :(..
What's the problem chef John ? The foil or the overising of the dough? - May 2, 2010 at 3:04 AM
- pan-aho said...
@Hiratana: you probably didn't mean to, but you gave me a good chuckle! your struggles w/the oven reminded me of when i tried to bake in my toaster oven ... due to the closeness of the heat rods [even when the setting was at "bake" the upper rods would heat up] i used foil after the first disaster. i, too, have left dough unattended due to an emergency and got a blob as a result. so, you must learn that you cannot "ignore" your dough AND the length of time is ONLY TILL IT HAS DOUBLED! i live in a warm climate so my dough usually will double in just over an hour!!! a hint i learned that will help you know when the bread is truly done [a pro like Chef John can just hear that - i don't trust myself] is to use a meat thermometer & get a reading of 190. you should then be able to enjoy a lovely loaf. good luck!
- May 2, 2010 at 1:31 PM
- Chef John said...
Sorry, but I'm not sure I have any advice for you. Not really sure about your setup.
- May 2, 2010 at 2:23 PM
- pan-aho said...
@Hiratana: sorry, forgot to note that 190 is in Fahrenheit
- May 2, 2010 at 4:33 PM
- Sky Rocks Your Fluffy Socks! said...
I love this recipe. I've made it twice for my family, and its so good. Its especially delicious the next morning, when the bread it toasted. Yum!
- May 13, 2010 at 12:23 PM
WOW!! this is great recipe. It was so easy and tasty!!
- May 28, 2010 at 9:42 PM
Awesome recipe.. but what if I want to make a bread that's a little sweeter? would sugar mess up with the yeast and make for a terrible bread?
- June 17, 2010 at 6:22 PM
- Chef John said...
Sure go for it, no problem
- June 17, 2010 at 6:57 PM
I just made it today, as per the recipe (but all white flour) and it came out beautifully; good crust, chewy, almost bakery standard.
Thank you. - June 20, 2010 at 2:35 AM
- Terri said...
I just took my first loaf of Ciabatta Bread out of the oven. Unfortunately, it was not your recipe, which is how I found yours - looking for a better one. I am going to try yours this coming week! Thank you for posting this!
- June 27, 2010 at 4:15 PM
- Deb Jones said...
HI Chef John, just wanted you to know I found your site from watching your videos on You Tube. Wonderful place you have here! I'm a bread baking newb, so I decided today (about 30 minutes ago) to give this one a shot. Well...one thing I have to point out that I'm not sure others caught but, in the video you say to use warm water, but the recipe just says water. I've made white bread before and know you have to give the yeast warm liquid to start off in, but I simply read the recipe and dumped in faucet temperature water like a total...well..newb. I have my dough sitting for the 18 rest period, and praying like crazy that I haven't messed it up and totally ticked off the yeast by not giving them their warm bath they crave. Anyways, will let you know how it turns out. Thanks for your hard work sharing cooking magic with the rest of us!
- June 28, 2010 at 4:54 PM
- Pink said...
Hi Chef
Ive made your ciabatta twice now, both times it taste wonderful and has great texture. Im using 1/2 wh wheat bread flour and 1/2 all purpose white.
I put 2Cs of wh wheat into the bowl with the salt, yeas,t and water, mix it up then add the rest of the flour. This way I know the yeast and salt have gotten incorporated. (inc!) I guess next time I'll add a bit more flour as I got one huge flat "slipper" big enough for two big italian feet (sort of a snuggie for feet!), but it spread out not up! And tonight we get to eat it with some homemade cheese from your recipe!I couldn't find my thermometer so I tried curding it by watching bubbles as you said, but when I added the lemon juice + nothing! SO I put 'er back on the burner and brought the temp up and when it got to the correct temp it curded right up!
Love your recipes, thanks so much!
Is there a place online where the steps are written out? - June 30, 2010 at 2:25 PM
- Chef John said...
Thanks! some are here, but you have to search around. http://americanfood.about.com/
- June 30, 2010 at 2:35 PM
hey chef, I left the bread the full 18 hrs to rise and it looks just like yours did and it was gluten strandified but it was impossible to handle and shape, sticking to everything, despite all the flour and oil. What could I have done wrong because I followed the recipe exactly.
- July 4, 2010 at 9:30 AM
- Chef John said...
Nothing wrong! It's very wet. You just have to use lots of flour and get a loaf shape somehow. U can try more flour at beginning also.
- July 5, 2010 at 1:47 AM
- Chef John said...
Nothing wrong! It's very wet. You just have to use lots of flour and get a loaf shape somehow. U can try more flour at beginning also.
- July 5, 2010 at 1:47 AM
- Unknown said...
Hi Chef,
i tried your bread 2 times, taste was perfect but somehow my bread wont rise.it is much more flat than yours (mine is maybe 1.5 inch high) so a third of the bread is crust :)
maybe i should try another flour, i used all purpose and 1/2 cup wheat but somebody wrote here that it is not a bad idea to use special bread flour.or should i just wait 2 1/2 hours before i put it in the oven or should i just die trying :D - July 9, 2010 at 3:29 AM
- Chef John said...
bread is a mystery. did you follow the directions exactly? Not sure what you mean by "should i just wait 2 1/2 hours before i put it in the oven" how long did you wait?
- July 9, 2010 at 8:56 AM
- Unknown said...
like you said in your video, 2 hours.
and yes i did follow the directions exactly.i think i will try i different flour. - July 9, 2010 at 10:43 AM
Sandwiches seem to taste so much better on something other than plain old sandwich bread. So I started looking around for a ciabatta bread recipe and found you! I tried this recipe 2 days and it turned out beautifully. Such a large loaf - I hoped it would last a day or two. Between my husband and kids, there was nothing left by the end of the day. I'm going to make more today but make several smaller loaves this time in hopes that it will limit how much they eat at one time. ;) Thank you so much for sharing this. It was so easy, so good for you (as opposed to store-bought/factory-made), and so much cheaper than buying it. I could pay $3+ for a loaf this size at the store or pay $1.50 for a bag of flour that will turn out far more than just 1 loaf of bread. Thank you! (Sorry no pic - it didn't last long enough.)
- July 9, 2010 at 4:18 PM
- Chef John said...
Kris, for the second raise the 2 hours is just a guess. It could be ready in 1 1/2 or 4 hours, you just have to wait until it rises a little more I think. The flour may help, but I've done with AP many times.
- July 9, 2010 at 11:08 PM
- Unknown said...
Thx Chef John, you are the best :D
- July 10, 2010 at 5:24 AM
- Deb Jones said...
Just wanted to report back that the bread came out great. Didn't rise as much in the baking, but still for my first try I was quite pleased. Makes wonderful sandwiches. I will certainly be trying this recipe again. Thanks Chef John!
- July 11, 2010 at 1:31 AM
- Unknown said...
ok i tried it again with the same result.it wont rise.this time i waited 4 hours before i put it in the oven and i used bread flour. somehow my dough is also more sticky, its almost impossible to work with.i will continue to try, next time maybe with little more yeast and maybe little less water.
- July 11, 2010 at 3:18 AM
Can this be baked on a stone rather than a cookie sheet? Thanks!
- July 14, 2010 at 12:24 PM
- Chef John said...
- July 14, 2010 at 12:26 PM


text:
Purchase your Tata Play DTH connection online and have the set-top box delivered at your doorstep in Kariapatti. Tata Play provides the most comprehensive channels and platform services line-up ranging from movies, news, entertainment, and sports channels. Avail the best DTH connection offers in Kariapatti with exciting OTT platform subscriptions that you can enjoy with your Tata Play DTH connection.
Tata Play brings you the best DTH connection in Kariapatti with exciting offers and plans. Avail seamless services and doorstep delivery of your DTH connection with a set-top box by placing an order via our website or calling us at 1860 120 6633 or 1860 500 6633.
Great connections come at greater prices with Tata Play. Our DTH plans in Kariapatti are economical, rewarding, and reliable. Tata Play has made it easy for you to choose packs that best suit your requirements.
Looking to install a secure and reliable DTH connection in Kariapatti? Choose Tata Play. Our DTH plans come with exciting rewards, discounts, and subscriptions. It gets better. You can choose from our range of set-top boxes to select the variant that suits you best.
Tata Play brings you the best DTH plans in Kariapatti. Enjoy seamless connectivity, endless entertainment, and undeniably great offers when you choose our DTH connection services. Watch your favorite shows without interruption, with up to three screens available with your connection.
At Tata Play, our DTH connection prices for Kariapatti starts at just Rs. 2 per day. Your plan is customizable, so you only pay for what you watch! What's more is that when you choose an annual DTH plan from Tata Play, your subscription comes with access to popular OTT platforms, and other exciting offers.
The process of recharging your Tata Play DTH connection in Kariapatti is fairly simple. You can choose the payment method that suits you best. Recharges can be done online via the Tata Play website or mobile app, or locally with an authorized dealer in Kariapatti. We accept payments for our DTH plans via Debit/Credit card, net-banking, UPI, LazyPay, PayPal, wallets, or Bharat QR.
Choose the best of entertainment with a Tata Play DTH connection. With a strong presence in Kariapatti, we're dedicated towards bringing our customers the best DTH plans in town. Watch all your favorite shows and movies from the comfort of your home with a superior DTH connection in Kariapatti, that boasts all the latest technology. Now the entire family can come together and bond over television, from cricket matches to daily soaps, there's something for absolutely everyone.
In Kariapatti, Tata Play brings you the best of DTH plans and services with attractive prices. Our DTH connections are used and appreciated by customers across Kariapatti. This is because we go beyond for our customers with exciting offers, customizable plans, and subscriptions to popular OTT platforms on the purchase of an annual plan.
HD television in Kariapatti will never be the same with Tata Play. Our customers can choose from a range of three set-top boxes for the performance and quality that best suits their needs. Our subscription plans are curated with the best of HD entertainment, knowledge, cinema, and more for you.
If you're looking to install a new DTH connection in Kariapatti, choose the best of DTH with Tata Play. Installing a new DTH connection with Tata Play is simple – you can register as a new user via our website or mobile app and fill in your details, channel preferences, and set-top box requirements. You can also give a call on 1860 120 6633 , 1860 500 6633 or visit the nearest authorized Tata Play dealer in Kariapatti.
Tata Play is the best DTH connection provider in Kariapatti. Our services come with the set-top box of your choice with attractive DTH plans that compliment your television-watching experience the best. With the Tata Play mobile app, you can manage your pack, recharge and enjoy Live TV at your fingertips.
You can get a new Tata Play connection in Kariapatti using any of these convenient options:

subset: commoncrawl


text:
Numeric Haskell: A Repa Tutorial
Repa is a Haskell library for high performance, regular, multi-dimensional parallel arrays. All numeric data is stored unboxed and functions written with the Repa combinators are automatically parallel (provided you supply "+RTS -N" on the command line when running the program).
This document provides a tutorial on array programming in Haskell using the Repa package and was based on version 3.2 of the library. Repa versions earlier than 3.0 use different API and are not compatible with this tutorial.
Note: a companion tutorial to this is provided as the vector tutorial, and is based on the NumPy tutorial.
Authors: Don Stewart (original version), Jan Stolarek (update from Repa 2 to Repa 3).
Quick Tour
Repa (REgular PArallel arrays) is an advanced, multi-dimensional parallel arrays library for Haskell, with a number of distinct capabilities:
- The arrays are "regular" (i.e. dense, rectangular and store elements all of the same type); and
- Functions may be written that are polymorphic in the shape of the array;
- Many operations on arrays are accomplished by changing only the shape of the array (without copying elements);
- The library will automatically parallelize operations over arrays.
This is a quick start guide for the package. For further information, consult:
- The Haddock Documentation
- Guiding Parallel Array Fusion with Indexed Types - describes architecture of Repa 3
- Regular, Shape-polymorphic, Parallel Arrays in Haskell.
- Efficient Parallel Stencil Convolution in Haskell
- Repa project homepage
Importing the library
Download the `repa` package:
$ cabal install repa
and import it qualified:
import qualified Data.Array.Repa as R
The library needs to be imported qualified as it shares the same function names as list operations in the Prelude.
Note: Operations that involve writing new index types for Repa arrays will require the '-XTypeOperators' language extension.
For non-core functionality, a number of related packages are available:
- repa-io
- repa-algorithms
- repa-devil (image loading)
and example algorithms in:
Type indexes
Repa 3 introduced a notion of type index:
data family Array rep sh e
In the above definition rep
is the type index, which is represented with a data type name and defines the type of underlying array representation. This allows to explicitly specify representation of an array on type system level. Repa distinguishes ten different types of representation, which fall into three categories: manifest, delayed and meta. Manifest arrays are represented by concrete values stored in memory using e.g. unboxed vectors (represented with data type U) or strict bytestrings (B). Delayed array (D) is a function from index to a value. Every time an element is requested from a delayed array it is calculated anew, which means that delayed arrays are inefficient when the data is needed multiple times. On the other hand delaying an array allows to perform optimisation by fusion. Meta arrays provide additional information about underlying array data, which can be used for load balancing or speeding up calculation of border effects. See Guiding Parallel Array Fusion with Indexed Types paper for a detailed explanation of each representation.
Array shapes
Before we can get started manipulating arrays, we need a grasp of repa's notion of array shape. Much like the classic 'array' library in Haskell, repa-based arrays are parameterized via a type which determines the dimension of the array, and the type of its index. However, while classic arrays take tuples to represent multiple dimensions, Repa arrays use a richer type language for describing multi-dimensional array indices and shapes (technically, a heterogeneous snoc list).
Shape types are built somewhat like lists. The constructor Z
to a rank zero shape, and is used to mark the end of the list. The :.
constructor adds additional dimensions to the shape. So, for example, the shape:
is the shape of a small 3D array, with shape type
(Z :. Int :. Int :. Int)
The most common dimensions are given by the shorthand names:
type DIM0 = Z
type DIM1 = DIM0 :. Int
type DIM2 = DIM1 :. Int
type DIM3 = DIM2 :. Int
type DIM4 = DIM3 :. Int
type DIM5 = DIM4 :. Int
Array U DIM2 Double
is the type of a two-dimensional array of unboxed doubles, indexed via Int
keys, while
Array U Z Double
is a zero-dimension object (i.e. a point) holding an unboxed Double.
Many operations over arrays are polymorphic in the shape / dimension
component. Others require operating on the shape itself, rather than
the array. A typeclass, Shape
, lets us operate uniformly
over arrays with different shape.
Building shapes
To build values of shape type, we can use the Z
and :.
constructors. Open the ghci and import Repa:
ghci> :m +Data.Array.Repa
ghci> Z -- the zero-dimension
For arrays of non-zero dimension, we must give a size. Note: a common error is to leave off the type of the size.
ghci> :t Z :. 10
Z :. 10 :: Num head => Z :. head
leading to annoying type errors about unresolved instances, such as:
No instance for (Shape (Z :. head0))
To select the correct instance, you will need to annotate the size literals with their concrete type:
ghci> :t Z :. (10 :: Int)
Z :. (10 :: Int) :: Z :. Int
is the shape of 1D arrays of length 10, indexed via Ints.
Given an array, you can always find its shape by calling extent
Additional convenience types for selecting particular parts of a shape are also provided (All, Any, Slice
etc.) which are covered later in the tutorial.
Working with shapes
That one key operation, extent
, gives us many attributes of an array:
-- Extract the shape of the array
extent :: (Shape sh, Source r e) => Array r sh e -> sh
So, given a 3x3x3 array, of type Array U DIM3 Int
, we can:
-- build an array
ghci> let x :: Array U DIM3 Int; x = fromListUnboxed (Z :. (3::Int) :. (3::Int) :. (3::Int)) [1..27]
ghci> :t x
x :: Array U DIM3 Int
-- query the extent
ghci> extent x
-- compute the rank (number of dimensions)
ghci> let sh = extent x
ghci> rank sh
-- compute the size (total number of elements)
> size sh
-- extract the elements of the array as a flat vector
ghci> toUnboxed x
fromList [1,2,3,4,5,6,7,8,9,10
,20,21,22,23,24,25,26,27] :: Data.Vector.Unboxed.Base.Vector Int
Generating arrays
New repa arrays ("arrays" from here on) can be generated in many ways, and we always begin by importing the Data.Array.Repa
$ ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
ghci> :m + Data.Array.Repa
They may be constructed from lists, for example. Here is a one dimensional array of length 10, here, given the shape
ghci> let inputs = [1..10] :: [Double]
ghci> let x = fromListUnboxed (Z :. (10::Int)) inputs
ghci> x
AUnboxed (Z :. 10) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
The type of x
is inferred as:
ghci> :t x
x :: Array U (Z :. Int) Double
which we can read as "an array of dimension 1, indexed via Int
keys, holding elements of type Double
stored using unboxed vectors"
We could also have written the type as:
ghci> let x' = fromListUnboxed (Z :. 10 :: DIM1) inputs
ghci> :t x'
x' :: Array U DIM1 Double
The same data may also be treated as a two dimensional array, by changing the shape parameter:
ghci> let x2 = fromListUnboxed (Z :. (5::Int) :. (2::Int)) inputs
ghci> x2
AUnboxed ((Z :. 5) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
which has the type:
ghci> :t x2
x2 :: Array U ((Z :. Int) :. Int) Double
or, as above, if we define it with the type synonym for 2 dimensional Int
- indexed arrays, DIM2
ghci> let x2' = fromListUnboxed (Z :. 5 :. 2 :: DIM2) inputs
ghci> x2'
AUnboxed ((Z :. 5) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
ghci> :t x2'
x2' :: Array U DIM2 Double
Building arrays from vectors
It is also possible to build arrays from unboxed vectors, from the 'vector' package:
fromUnboxed :: (Shape sh, Unbox e) => sh -> Vector e -> Array U sh e
New arrays are built by applying a shape to the vector. For example:
ghci> :m + Data.Vector.Unboxed
ghci> let x = fromUnboxed (Z :. (10::Int)) (enumFromN 0 10)
ghci> x
AUnboxed (Z :. 10) (fromList [0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0])
is a one-dimensional array of doubles. As usual, we can also impose other shapes:
ghci> let x = fromUnboxed (Z :. (3::Int) :. (3::Int)) (enumFromN 0 9)
ghci> x
AUnboxed ((Z :. 3) :. 3) (fromList [0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0])
ghci> :t x
x :: Array U ((Z :. Int) :. Int) Double
to create a 3x3 array.
Generating random arrays
The repa-algorithms package lets us generate new arrays with random data:
-- 3d array of Ints, bounded between 0 and 255.
ghci> randomishIntArray (Z :. (3::Int) :. (3::Int) :. (3::Int)) 0 255 1
AUnboxed (((Z :. 3) :. 3) :. 3) (fromList [217,42,130,200,216,254,67,77,152,
Reading arrays from files
Using the repa-io package, arrays may be written and read from files in a number of formats:
- as BMP files; and
- in a number of text formats.
with other formats rapidly appearing. An example: to write an 2D array to an ascii file:
ghci> :m +Data.Array.Repa.IO.Matrix
ghci> let x = fromList (Z :. 5 :. 2 :: DIM2) [1..10]
ghci> writeMatrixToTextFile "test.dat" x
This will result in a file containing:
In turn, this file may be read back in via readMatrixFromTextFile
ghci> xx <- readMatrixFromTextFile "test.dat"
ghci> xx
AUnboxed ((Z :. 5) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
ghci> :t xx
xx :: Array U DIM2 Double
To process .bmp files, use Data.Array.Repa.IO.BMP, as follows (currently reading only works for 24 bit .bmp):
Data.Array.Repa.IO.BMP> x <- readImageFromBMP "/tmp/test24.bmp"
Reads this .bmp image:
as a 3D array of Word8
, which can be further processed.
For image IO in many, many formats, use the repa-devil library.
Copying arrays from pointers
You can also generate new repa arrays by copying data from a pointer. Here is an example, using fromForeignPtr
import Data.Word
import Foreign.Ptr
import qualified Foreign.ForeignPtr.Safe as FPS
import qualified Data.Vector.Storable as V
import qualified Data.Array.Repa as R
import qualified Data.Array.Repa.Repr.ForeignPtr as RFP
import Data.Array.Repa
import Data.Array.Repa.IO.DevIL
i, j, k :: Int
(i, j, k) = (255, 255, 4) -- RGBA
-- 1D vector, filled with pretty colors
v :: V.Vector Word8
v = V.fromList . take (i * j * k) . cycle $ concat
[ [ r, g, b, 255 ]
| r <- [0 .. 255]
, g <- [0 .. 255]
, b <- [0 .. 255]
ptr2repa :: Ptr Word8 -> IO (R.Array RFP.F R.DIM3 Word8)
ptr2repa p = do
fp <- FPS.newForeignPtr_ p
return $ RFP.fromForeignPtr (Z :. i :. j :. k) fp
main = do
-- copy our 1d vector to a repa 3d array, via a pointer
r <- V.unsafeWith v ptr2repa
runIL $ writeImage "test.png" (RGBA r)
return ()
The v
function creates a vector filled with pixel data (RGBA values); ptr2repa
takes a Ptr
, converts it to ForeignPtr
which is then used to copy data into a 3D REPA array (first two dimensions correspond to pixel location, the third dimension corresponds to colour channel). In the main function we use unsafeWith
function operating on storable vectors. It passes Ptr
to vector's internal data to a function that operates on that Ptr
(it may not modify the data). In our case this is the ptr2repa
array, which returns image data wrapped in an array. That array is then passed as data to writeImage
function. RGBA
is a data constructor for Image
type. This allows writeImage
to interpret array data correctly. runIL
is a wrapper around IO monad that guarantees that IL library will be properly initialized. The result is written to disk as this image:
Indexing arrays
To access elements in repa arrays, you provide an array and a shape, to access the element:
(!) :: (Shape sh, Source r e) => Array r sh e -> sh -> e
Indices start with 0. So:
ghci> let x = fromListUnboxed (Z :. (10::Int)) [1..10]
ghci> x ! (Z :. 2)
Note that we can't give just a bare literal as the shape, even for one-dimensional arrays:
> x ! 2
No instance for (Num (Z :. Int))
arising from the literal `2'
as the Z
type isn't in the Num
class, and Haskell's numeric literals are overloaded.
What if the index is out of bounds, though?
> x ! (Z :. 11)
*** Exception: ./Data/Vector/Generic.hs:244 ((!)): index out of bounds (11,10)
An exception is thrown. Older versions of repa offered safe indexing operator (!?)
that returned Maybe
, but it is no longer available in repa 3.2.
Operations on arrays
Besides indexing, there are many regular, list-like operations on arrays. Since many of the names parallel those in the Prelude, we import Repa qualified:
ghci> import qualified Data.Array.Repa as Repa
Maps, zips, filters and folds
Let us define an unboxed array:
ghci> let x = fromListUnboxed (Z :. (3::Int) :. (3::Int)) [1..9]
ghci> x
AUnboxed ((Z :. 3) :. 3) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0])
We can map over multi-dimensional arrays with map
, but since it conflicts with the definition in the Prelude, we have to use it with the qualifier we requested:
ghci> let y = Repa.map (^2) x
The type of Repa.map
map :: (Shape sh, Source r a) =>
(a -> b) -> Array r sh a -> Array D sh b
This means that result is a delayed array (represented by letter D in the return type). We can index into delayed array (remember that indices are 0-based):
ghci> y Repa.! (Z :. 0 :. 2)
ghci> y Repa.! (Z :. 2 :. 0)
Passing an incorrect index will NOT cause an exception:
ghci> y Repa.! (Z :. 0 :. 3)
ghci> y Repa.! (Z :. 0 :. -4)
ghci> y Repa.! (Z :. 10 :. 10)
Since delayed arrays are not instances of Show type class, we cannot display the whole array directly:
ghci> y
No instance for (Show (Array D ((Z :. Int) :. Int) Double))
arising from a use of `print'
To display y
array it must be turned into manifest array by computing all its values. This can be done either with computeP, which evaluates array in parallel, or computeS, which evaluates values sequentially. Looking at the type of computeP:
ghci> :t computeP
:: (Monad m, Source r2 e, Load r1 sh e, Target r2 e) =>
Array r1 sh e -> m (Array r2 sh e)
we can see that the result is enclosed within a monad. The reason for this is that monads give a well defined notion of sequence and thus computeP
enforces completion of parallel evaluation in a particular point of monadic computations. This prevents nested data parallelism, which is not supported by Repa. We don't really care here about monadic effect, so we can take the manifest array out of a monad after computeP
is done:
ghci> computeP y :: IO (Array U DIM2 Double)
AUnboxed ((Z :. 3) :. 3) (fromList [1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0])
ghci> z <- computeP y :: IO (Array U DIM2 Double)
ghci> z
AUnboxed ((Z :. 3) :. 3) (fromList [1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0])
ghci> let [w] = computeP y :: [Array U DIM2 Double]
ghci> w
AUnboxed ((Z :. 3) :. 3) (fromList [1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0])
Repa's map
leaves the dimension unchanged:
ghci> extent x
ghci> extent y
There are four fold operations in Repa library: foldP
, foldS
, foldAllP
and foldAllS
. First two reduce the the inner dimension of the array, the last two reduce whole array to one value. The P
and S
suffixes stand for parallel and sequential evaluation. First parameter of parallel folds must be an associative sequential operator and the starting element must be a neutral element of that operator. This is required in order to ensure correctness of parallel evaluation.
Type of foldP
is given as:
foldP :: (Monad m, Shape sh, Source r a, Unbox a, Elt a) =>
(a -> a -> a) -> a -> Array r (sh :. Int) a -> m (Array U sh a)
The x
defined above was a 2D array:
ghci> extent x
but if we sum each row:
ghci> Repa.foldP (+) 0 x
AUnboxed (Z :. 3) (fromList [6.0,15.0,24.0])
we get a 1D array instead (liftM
is used to run extent
function within a monad returned by foldP
ghci> liftM extent (Repa.foldP (+) 0 x)
Similarly, if y
is a (3 x 3 x 2) 3D array:
ghci> let y = fromListUnboxed ((Z :. 3 :. 3 :. 2) :: DIM3) [1..18]
ghci> y
AUnboxed (((Z :. 3) :. 3) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0])
we can fold over the inner dimension:
ghci> Repa.foldP (+) 0 y
AUnboxed ((Z :. 3) :. 3) (fromList [3.0,7.0,11.0,15.0,19.0,23.0,27.0,31.0,35.0])
yielding a 2D (3 x 3) array in place of our 3D (3 x 3 x 3) array.
Two arrays may be combined via zipWith
zipWith :: (Shape sh, Source r2 b, Source r1 a) =>
(a -> b -> c) -> Array r1 sh a -> Array r2 sh b -> Array D sh c
an example:
ghci> let y = Repa.zipWith (*) x x
ghci> computeP y :: IO (Array U DIM2 Double)
AUnboxed ((Z :. 3) :. 3) (fromList [1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0])
ghci> extent y
If the extent of the two array arguments differ, then the resulting array's extent is their intersection.
Mapping, with indices
A very powerful operator is traverse
, an array transformation which also supplies the current index:
traverse :: (Shape sh', Shape sh, Source r a)
=> Array r sh a -- Source array
-> (sh -> sh') -- Function to produce the extent of the result.
-> ((sh -> a) -> sh' -> b) -- Function to produce elements of the result.
-- It is passed a lookup function to
-- get elements of the source.
-> Array D sh' b
This is quite a complicated type, because it is very general. Let's take it apart. The first argument is the source array, which is obvious. The second argument is a function that transforms the shape of the input array to yield the output array. So if the arrays are the same size, this function is id
. It might grow or resize the shape in other ways.
Finally, the 3rd argument is where the magic is. It is a function (often anonymous one) that takes two parameters: a function that looks up elements of an original array and a location of the currently processed element in the new array. Based on these two parameters a new value is determined for the resulting array. Note that traverse
goes through all elements of the resulting array and it is up to you how to get values of original array based on an index of the new array.
returns a delayed array, which means we will use computeP
to evaluate its values and display them on the screen.
So we see this generalizes map to support indexes, and optional inspection of the current element. Let's try some examples:
ghci> let x = fromListUnboxed (Z :. (3::Int) :. (3::Int) :. (3::Int)) [1..27] :: Array U DIM3 Int
ghci> x
AUnboxed (((Z :. 3) :. 3) :. 3) (fromList [1,2,3,4,5,6,7,8,9,
-- Keeping the shape the same, and just overwriting elements
-- Use `traverse` to set all elements to their `x` axis:
ghci> computeP $ traverse x id (\_ (Z :. i :. j :. k) -> i) :: IO (Array U DIM3 Int)
AUnboxed (((Z :. 3) :. 3) :. 3) (fromList [0,0,0,0,0,0,0,0,0,
-- Shuffle elements around, based on their index.
-- Rotate elements by swapping elements from rotated locations:
ghci> computeP $ traverse x id (\f (Z :. i :. j :. k) -> f (Z :. j :. k :. i)) :: IO (Array U DIM3 Int)
AUnboxed (((Z :. 3) :. 3) :. 3) (fromList [1,4,7,10,13,16,19,22,25,
-- Take a slice of one dimension. The resulting shape of the array changes
ghci> computeP $ traverse x (\(e :. _) -> e) (\f (Z :. i :. j) -> f (Z :. i :. j :. 0)) :: IO (Array U DIM2 Int)
AUnboxed ((Z :. 3) :. 3) (fromList [1,4,7,10,13,16,19,22,25])
The documentation on traverse provides further information.
Numeric operations: negation, addition, subtraction, multiplication
To perform basic numeric operations on Repa arrays you must use specialized operators: (+^)
(addition), (-^)
(subtraction), (*^)
(multiplication) and (/^)
(division). All these operators work element-wise and produce delayed arrays (they have to be computed if you want to have results as unboxed arrays).
ghci> let x = fromListUnboxed (Z :. (10 :: Int)) [1..10]
ghci> computeP $ x +^ x :: IO (Array U DIM1 Double)
AUnboxed (Z :. 10) (fromList [2.0,4.0,6.0,8.0,10.0,12.0,14.0,16.0,18.0,20.0])
ghci> computeP $ x -^ x :: IO (Array U DIM1 Double)
AUnboxed (Z :. 10) (fromList [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0])
ghci> computeP $ x *^ x :: IO (Array U DIM1 Double)
AUnboxed (Z :. 10) (fromList [1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0,100.0])
ghci> computeP $ x /^ x :: IO (Array U DIM1 Double)
AUnboxed (Z :. 10) (fromList [1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0])
Changing the shape of an array
One of the main advantages of repa-style arrays over other arrays in Haskell is the ability to reshape data without copying. This is achieved via *index-space transformations*.
An example: transposing a 2D array. First, the type of the transformation:
transpose2D :: (Source r e) => Array r DIM2 e -> Array D DIM2 e
Note that this transform will work on DIM2 arrays holding any elements. Now, to swap rows and columns, we have to modify the shape:
transpose2D a = backpermute (swap e) swap a
e = extent a
swap (Z :. i :. j) = Z :. j :. i
The swap function reorders the index space of the array. To do this, we extract the current shape of the array, and write a function that maps the index space from the old array to the new array. That index space function is then passed to backpermute which actually constructs the new array from the old one.
backpermute generates a new array from an old, when given the new shape, and a function that translates between the index space of each array (i.e. a shape transformer).
backpermute :: (Shape sh2, Shape sh1, Source r e) =>
sh2 -> (sh2 -> sh1) -> Array r sh1 e -> Array D sh2 e
Note that the array created is not actually evaluated (we only modified the index space of the array).
Transposition is such a common operation that it is provided by the library:
transpose :: (Shape sh, Source r e) =>
Array r ((sh :. Int) :. Int) e -> Array D ((sh :. Int) :. Int) e
The types indicate that it works on the lowest two dimensions of the array.
Arrays shape can be changed without altering the underlying data by using reshape
ghci> let x = fromListUnboxed (Z :. (5 :: Int) :. (2 :: Int)) [1..10]
ghci> x
AUnboxed ((Z :. 5) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
ghci> computeP $ reshape (Z :. (2::Int) :. (5::Int)) x :: IO (Array U DIM2 Double)
AUnboxed ((Z :. 2) :. 5) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
Following are some examples of useful functions that exercise the API.
Example: Rotating an image with backpermute
Flip an image upside down:
import Foreign.Ptr
import System.Environment
import Data.Word
import Data.Array.Repa hiding ((++))
import Data.Array.Repa.IO.DevIL
import Data.Array.Repa.Repr.ForeignPtr
main :: IO ()
main = do
[f] <- getArgs
(RGB v) <- runIL $ readImage f
rotated <- (computeP $ rot180 v) :: IO (Array F DIM3 Word8)
runIL $ writeImage ("flip-"++f) (RGB rotated)
rot180 :: (Source r e) => Array r DIM3 e -> Array D DIM3 e
rot180 g = backpermute e flop g
e@(Z :. x :. y :. _) = extent g
flop (Z :. i :. j :. k) =
(Z :. x - i - 1 :. y - j - 1 :. k)
Running this:
$ ghc -O2 --make -threaded -rtsopts repa.hs $ ./repa "haskell.jpg" +RTS -N2
Results in:
Example: matrix-matrix multiplication
A more advanced example from the Repa paper is matrix-matrix multiplication. The result of matrix multiplication is a matrix whose elements are found by multiplying the elements of each row from the first matrix by the associated elements of the same column from the second matrix and summing the result.
if and
So we take two, 2D arrays and generate a new array, using our transpose function from earlier:
mmMult :: Monad m
=> Array U DIM2 Double
-> Array U DIM2 Double
-> m (Array U DIM2 Double)
mmMult a b = sumP (Repa.zipWith (*) aRepl bRepl)
t = transpose2D b
aRepl = extend (Z :.All :.colsB :.All) a
bRepl = extend (Z :.rowsA :.All :.All) t
(Z :.colsA :.rowsA) = extent a
(Z :.colsB :.rowsB) = extent b
The idea is to expand both 2D argument arrays into 3D arrays by
replicating them across a new axis using extend
function. The front face of the cuboid that results represents the array a
, which we replicate as often as b
has columns (colsB)
, producing aRepl
The top face represents t
(the transposed b), which we
replicate as often as a has rows (rowsA)
, producing
. The two replicated arrays have the same extent,
which corresponds to the index space of matrix multiplication.
Optimized implementations of this function are available in the repa-algorithms package.
Example: parallel image desaturation
To convert an image from color to greyscale, we can use the luminosity method to average RGB pixels into a common grey value, where the average is weighted for human perception of green.
The formula for luminosity is 0.21 R + 0.71 G + 0.07 B.
We can write a parallel image desaturation tool using repa and the repa-devil image library:
import System.Environment
import Data.Word
import Data.Array.Repa hiding ((++))
import Data.Array.Repa.IO.DevIL
import Data.Array.Repa.Repr.ForeignPtr
-- Read an image, desaturate, write out with new name.
main = do
[f] <- getArgs
runIL $ do
(RGB a) <- readImage f
b <- (computeP $ traverse a id luminosity) :: IL (Array F DIM3 Word8)
writeImage ("grey-" ++ f) (RGB b)
And now the luminosity transform itself, which averages the 3 RGB colors based on perceived weight:
-- (Parallel) desaturation of an image via the luminosity method.
luminosity :: (DIM3 -> Word8) -> DIM3 -> Word8
luminosity _ (Z :. _ :. _ :. 3) = 255 -- alpha channel
luminosity f (Z :. i :. j :. _) = ceiling $ 0.21 * r + 0.71 * g + 0.07 * b
r = fromIntegral $ f (Z :. i :. j :. 0)
g = fromIntegral $ f (Z :. i :. j :. 1)
b = fromIntegral $ f (Z :. i :. j :. 2)
And that's it! The result is a parallel image desaturator, when compiled with
$ ghc -O -threaded -rtsopts --make repa.hs
which we can run, to use two cores:
$ time ./repa sunflower.png +RTS -N2 -H real 0m0.048s user 0m0.052s sys 0m0.016s
We can also see that program takes a bit longer when run on a single core:
$ time ./repa sunflower.png +RTS -N1 -H real 0m0.064s user 0m0.060s sys 0m0.008s
Given an image like this:
The desaturated result from Haskell:
Example: Partial Differential equations, idiomatic option pricing and risk
http://idontgetoutmuch.wordpress.com/2013/01/05/option-pricing-using-haskell-parallel-arrays/ http://stackoverflow.com/questions/14082158/idiomatic-option-pricing-and-risk-using-repa-parallel-arrays http://idontgetoutmuch.wordpress.com/2013/02/10/parallelising-path-dependent-options-in-haskell-2/
Optimising Repa programs
Note: This section is based on older version of Repa (2.x). It seems that it is not entirely accurate for Repa 3. For example there is no force
function and array type (manifest or delayed) is now explicitly defined using type index. I do not feel sufficiently competent to update this section so I am leaving it "as is" for the time being. --killy9999 09:12, 11 October 2012 (UTC)
Fusion, and why you need it
Repa depends critically on array fusion to achieve fast code. Fusion is a fancy name for the combination of inlining and code transformations performed by GHC when it compiles your program. The fusion process merges the array filling loops defined in the Repa library, with the "worker" functions that you write in your own module. If the fusion process fails, then the resulting program will be much slower than it needs to be, often 10x slower an equivalent program using plain Haskell lists. On the other hand, provided fusion works, the resulting code will run as fast as an equivalent cleanly written C program. Making fusion work is not hard once you understand what's going on.
The force
function has the loops
Suppose we have the following binding:
arr' = R.force $ R.map (\x -> x + 1) arr
The right of this binding will compile down to code that first allocates the result array arr'
, then iterates over the source array arr
, reading each element in turn and adding one to it, then writing to the corresponding element in the result.
Importantly, the code that does the allocation, iteration and update is defined as part of the force
function. This forcing code has been written to break up the result into several chunks, and evaluate each chunk with a different thread. This is what makes your code run in parallel. If you do not use force
then your code will be slow and not run in parallel.
Delayed and Manifest arrays
In the example from the previous section, think of the R.map (\x -> x + 1) arr
expression as a specification for a new array. In the library, this specification is referred to as a delayed array. A delayed array is represented as a function that takes an array index, and computes the value of the element at that index.
Applying force
to a delayed array causes all elements to be computed in parallel. The result of a force
is referred to as a manifest array. A manifest array is a "real" array represented as a flat chunk of memory containing array elements.
All Repa array operators will accept both delayed and manifest arrays. However, if you index into a delayed array without forcing it first, then each indexing operation costs a function call. It also recomputes the value of the array element at that index.
Shells and Springs
Here is another way to think about Repa's approach to array fusion. Suppose we write the following binding:
arr' = R.force $ R.map (\x -> x * 2) $ R.map (\x -> x + 1) arr
Remember from the previous section, that the result of each of the applications of R.map
is a delayed array. A delayed array is not a "real", manifest array, it's just a shell that contains a function to compute each element. In this example, the two worker functions correspond to the lambda expressions applied to R.map
When GHC compiles this example, the two worker functions are fused into a fresh unfolding of the parallel loop defined in the code for R.force
. Imagine holding R.force
in your left hand, and squashing the calls to R.map
into it, like a spring. Doing this breaks all the shells, and you end up with the worker functions fused into an unfolding of R.force
INLINE worker functions
Consider the following example:
f x = x + 1 arr' = R.force $ R.zipWith (*) (R.map f arr1) (R.map f arr2)
During compilation, we need GHC to fuse our worker functions into a fresh unfolding of R.force
. In this example, fusion includes inlining the definition of f
. If f
is not inlined, then the performance of the compiled code will be atrocious. It will perform a function call for each application of f
, where it really only needs a single machine instruction to increment the x
Now, in general, GHC tries to avoid producing binaries that are "too big". Part of this is a heuristic that controls exactly what functions are inlined. The heuristic says that a function may be inlined only if it is used once, or if its definition is less than some particular size. If neither of these apply, then the function won't be inlined, killing performance.
For Repa programs, as fusion and inlining has such a dramatic effect on performance, we should absolutely not rely on heuristics to control whether or not this inlining takes place. If we rely on a heuristic, then even if our program runs fast today, if this heuristic is ever altered then some functions that used to be inlined may no longer be.
The moral of the story is to attach INLINE pragmas to all of your client functions that compute array values. This ensures that these critical functions will be inlined now, and forever.
{-# INLINE f #-} f x = x + 1
arr' = R.force $ R.zipWith (*) (R.map f arr1) (R.map f arr2)


text:
PostgreSQL 8.1.23 Documentation | ||||
Prev | Fast Backward | Appendix E. Release Notes | Fast Forward | Next |
Release date: 2010-03-15
This release contains a variety of fixes from 8.1.19. For information about new features in the 8.1 major release, see Section E.24.
A dump/restore is not required for those running 8.1.X. However, if you are upgrading from a version earlier than 8.1.18, see the release notes for 8.1.18.
Add new configuration parameter ssl_renegotiation_limit to control how often we do session key renegotiation for an SSL connection (Magnus)
This can be set to zero to disable renegotiation completely, which may be required if a broken SSL library is used. In particular, some vendors are shipping stopgap patches for CVE-2009-3555 that cause renegotiation attempts to fail.
Fix possible crashes when trying to recover from a failure in subtransaction start (Tom)
Fix server memory leak associated with use of savepoints and a client encoding different from server's encoding (Tom)
Make substring()
bit types treat any negative length
as meaning "all the rest of the
string" (Tom)
The previous coding treated only -1 that way, and would produce an invalid result value for other negative values, possibly leading to a crash (CVE-2010-0442).
Fix integer-to-bit-string conversions to handle the first fractional byte correctly when the output bit width is wider than the given integer by something other than a multiple of 8 bits (Tom)
Fix some cases of pathologically slow regular expression matching (Tom)
Fix the STOP WAL LOCATION entry in backup history files to report the next WAL segment's name when the end location is exactly at a segment boundary (Itagaki Takahiro)
Fix some more cases of temporary-file leakage (Heikki)
This corrects a problem introduced in the previous minor release. One case that failed is when a plpgsql function returning set is called within another function's exception handler.
When reading pg_hba.conf and related files, do not treat @something as a file inclusion request if the @ appears inside quote marks; also, never treat @ by itself as a file inclusion request (Tom)
This prevents erratic behavior if a role or database name starts with @. If you need to include a file whose path name contains spaces, you can still do so, but you must write @"/path to/file" rather than putting the quotes around the whole construct.
Prevent infinite loop on some platforms if a directory is named as an inclusion target in pg_hba.conf and related files (Tom)
Fix psql's numericlocale option to not format strings it shouldn't in latex and troff output formats (Heikki)
Fix plpgsql failure in one case where a composite column is set to NULL (Tom)
Add volatile markings in PL/Python to avoid possible compiler-specific misbehavior (Zdenek Kotala)
Ensure PL/Tcl initializes the Tcl interpreter fully (Tom)
The only known symptom of this oversight is that the Tcl clock command misbehaves if using Tcl 8.5 or later.
Prevent crash in contrib/dblink when too many key columns
are specified to a dblink_build_sql_*
function (Rushabh
Lathia, Joe Conway)
Fix assorted crashes in contrib/xml2 caused by sloppy memory management (Tom)
Update time zone data files to tzdata release 2010e for DST law changes in Bangladesh, Chile, Fiji, Mexico, Paraguay, Samoa.


text:
After the short videos, let's move on to full presentations and start with Final Fantasy X/X-2 HD Remaster (FFX HD here) and the first 17 minutes of the game. No sound sadly, we couldn't get a headset :(
$135 of $400 per month
Become a patron →
MikeManiac61 Wasn't expecting that today at the Trump rally..... (1 Day ago)
Tinks :D (6 Days ago)
EzioAltair hi (6 Weeks ago)
Loakum *takes a sip of grape juice* The Great Awakening is happening…. (> 3 Months ago)
gigantor21 We getting any Tekken 8 demo footage? (> 3 Months ago)
dc_coder_84 Playing Half-Life 1 with ray tracing mod on Linux, yay ;) (> 3 Months ago)
nostradamus MS-Bethesda-ABK does have some ring to it. My oh my, (> 3 Months ago)
Driftwood Download is now functional again on Gamersyde. Sorry for the past 53 days or so when it wasn't. (> 3 Months ago)
Driftwood Another (French) livestream today at 2:30 CEST but you're welcome to drop by and speak English. I will gladly answer in English when I get a chance to catch a breath. :) (> 3 Months ago)
Driftwood GSY is getting some nice content at 3 pm CEST with our July podcast and some videos of the Deus Ex Mankind Divided preview build. :) (> 3 Months ago)
Driftwood For once we'll be live at 4:30 pm CEST. Blim should not even be tired! (> 3 Months ago)
Driftwood More Quantum Break coverage coming in a few hours, 9:00 a.m CEST. (> 3 Months ago)
Driftwood We'll have a full review up for Firewatch at 7 pm CET. Videos will only be tomorrow though. (> 3 Months ago)
Driftwood Tonight's livestream will be at 9:15 GMT+1, not GMT+2 as first stated. (> 3 Months ago)


text:
The code that has been used to validate the owner of this site is invalid. This is usually due to a link that enters the site through an invalid entry point.
You can click the "Back" button of your web browser to return to the page that brought you here.
Please contact support or the webmaster and let them know about this error.


text:
The Wire's War on the Drug WarThe Editors
On The Road Through Nothingness
Anglican bishops decry the 'new creed' of extreme capitalism
Holy See Denounces Misuse of Protection Principle
Behind AIG's Fall, Blind Eye to a Web of Risk
Libertarian Heresy
Enjoy this post? Share it with others.
Not a member? Register here
Forgot your password?
Copyright © 2008 GODSPY.com | Published by Transmodern Media LLC.


text:
Designs by nezumiworld
Michelle Ryan
London UK
Love both traditional and non-traditional design methods and media. If you buy my fabric I'd love to see what you make from it. Fabrics can be used to manufacture goods or make products to sell. Artwork protected by © copyright - All rights reserved.


text:
Estimated read time: 4-5 minutes
This archived news story is available only for your personal, non-commercial use. Information in the story may be outdated or superseded by additional information. Reading or replaying the story in its archived form does not constitute a republication of the story.
CAPE CANAVERAL, Fla. (AP) - Schoolchildren joined NASA managers and relatives of the lost crew of space shuttle Columbia on Friday to mark the 10th anniversary of the tragedy and remember the seven astronauts who died.
More than 300 people gathered at Kennedy Space Center for the outdoor ceremony, just a few miles from where Columbia was supposed to land on Feb. 1, 2003, following a 16-day science mission. It never made it, bursting apart in the sky over Texas, just 16 minutes from home.
Representing the families of the Columbia seven, the widow of commander Rick Husband told the hushed audience that the accident was so unexpected and the shock so intense, "that even tears were not freely able to fall."
"They would come in the weeks, months and years to follow in waves and in buckets," said Evelyn Husband Thompson.
She assured everyone, though, that healing is possible and that blessings can arise from hardships. She attended the ceremony with her two children, her second husband and Sandra Anderson, widow of Columbia astronaut Michael Anderson.
"God bless the families of STS-107," said Thompson, referring to the mission designation for Columbia's last mission. "May our broken hearts continue to heal and may beauty continue to replace the ashes."
A pair of songs added to the emotion of the day. The young nephew of a NASA worker performed a song he wrote, "16 Minutes from Home," on the keyboard, along with a vocalist. And Grammy award-winning BeBe Winans, an R&B and gospel singer, performed "Ultimate Sacrifice," which he wrote for soldiers serving overseas.
As it turns out, Anderson had taken a CD of Winans' music into orbit with him. It was recovered in the debris that rained down on East Texas that fateful morning. Winans did not know that until it was mentioned at Friday's ceremony.
"I honor you today, I really do honor the families and those who have given the ultimate sacrifice," he added. Some in the crowd wiped away tears as he sang.
Also present were 44 students from Israel, the homeland of Columbia astronaut Ilan Ramon. He was Israel's first astronaut.
The teenagers were proud to note that they go to the same school as Ramon once did. They wore white sweat shirts with an emblem of their nation's first spaceman and the religious items he took into orbit.
"He represented Israel in the best way possible, so I think it's an honor for us to be here," said Eden Mordechai, 15.
The other Columbia crew members were co-pilot William McCool, Kalpana Chawla, Dr. Laurel Clark and Dr. David Brown.
NASA's human exploration chief, Bill Gerstenmaier, said no single person or event caused the Columbia disaster. Rather, "a series of technical and cultural missteps" were to blame, dating back to the first shuttle launch in 1981 when fuel-tank foam insulation started coming off and doing damage.
A chunk of foam punched a hole in Columbia's left wing during liftoff, leading to the catastrophic re-entry.
The astronaut who led the charge back to shuttle flight two years later, Eileen Collins, stressed that the 30-year shuttle program had its share of successes along the way and achieved its ultimate goal, building the International Space Station. The shuttles were retired in 2011.
"We still miss you," Collins said of the Columbia seven. "How can we ever thank you for your contributions to the great journey of human discovery."
The hourlong ceremony was held in front of the huge black granite monument bearing the names of all 24 astronauts who have died in the line of NASA duty. The three-man crew of Apollo 1 died in the Jan. 27, 1967, launch pad fire. The Challenger seven were killed Jan. 28, 1986, during liftoff. Husband and his crew honored them during their own flight, just four days before dying themselves.
On Friday, the names of each of the dead were read aloud. Afterward, mourners placed carnations and roses on the grating in front of the mirror-faced monument.
"I felt compelled to be here to memorialize those who were a big part of my life," said David Nieds, 39, a grocery store manager who got up early to drive from Fort Lauderdale with his mother and 16-year-old nephew.
He attended dozens of launches. Some people like sports, he explained, while he follows the space program.
Memorial services also were held at Arlington National Cemetery, where three of the Columbia crew are buried; in East Texas, where the shuttle wreckage fell; and in Israel.
"Space exploration and the sacrifice these pioneers made benefits us all," President Barack Obama said in a statement. "Today, we honor their lives and recommit ourselves to living up to their shining example."
NASA: http://www.nasa.gov
(Copyright 2013 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.)


text:
Downers Grove Promar Window Replacement|(630) 598-1281|Free Local Window Estimates
Downers Grove Promar Window Replacement makes use of certainly cost-free location window in addition to in addition door quote in addition to superior alternative services. We put any sort of kind of in addition to all windows in Downers Grove, Illinois: bay windows, casement windows, double hung windows, velux skylights, image windows, storage windows, double pane windows, vinyl windows, wood windows, fiberglass windows, light-weight lightweight aluminum windows moving doors, French doors, together with more!Our Website: https://downersgrovepromarwindowreplacement.com/Why Choose Downers Grove Promar Window Replacement? We are remembered born in mind bore in mind noted below to take treatment of you!Locations We Serve: Crest Hill, IL; Elmhurst, IL; Genview, IL; Carol Stream, IL; Lincolnshire, IL; Chicago, IL; Tinley Park, IL; Niles, IL; Hoffman Estates, IL; La Grange, IL; Wood Dale, IL; Bartlett, IL; Berwyn, IL; Northbrook, IL; Oak Park, IL; Crystal Lake, IL; Woodridge, IL; Bloomingdale, IL; Westmont, IL; Palatine, IL; Lombard, IL; Channahon, IL; Lincolnshire, IL; Buffalo Grove, IL; Vernon Hills, IL; Highland Park, IL; Grayslake, IL; Deerfield, IL; New Lenox, IL; in addition to in addition more!https:// youtu.be/ xAE3gmS5STc.
Comments are closed.