text:
I'm working on a series of articles about personal blogging, but I wanted to share with you a perfect example of a personal blog. It's by my cousin, Duke DesRochers.
You may remember Duke from the story I did on him called, "Future Social Media Renaissance Man," on Lorelle on WordPress or the one on the Blog Herald called "Exploring Social Media: Social Means Personal" as part of my Exploring Social Media article series.
When Duke first emailed me to vote for his audition tape to be the next The Next Food Network Star, I was dumbfounded by his well done audition video showing how to carve vegetables with a lathe and drill in his garage, then cooking them up to make the most incredible side dish presentation. While he didn't make it into the finals, an oversight on their part I'm sure, he did follow through on my encouragement to create a blog.
Truthfully, I signed him up and set up his WordPress.com blog in about 20 minutes and told him, "Go blog."
He had no idea what I was talking about.
Where Do You Begin With a Blog?
Isn't that where everyone starts? Totally clueless. Everyone is talking blog this, blog that, social media, Twitter, Flickr, tweet, but really, until you dig in, you have little understand about what this bloggy thing is all about. Other than occasionally surfing the web, his only interaction with the web world was through email. Now, he's a proud blog owner and getting a taste of the power of the blog.
At first, Duke did his best with his blog. He put the audition video in and wrote some posts about the process, spreading the word to his friends and family, who showed up faithfully to leave a comment or two and cheer him on.
As everyone does, he poked and prodded his way along the bloggy path, learning as he went. For a few weeks, I coached him on how to uncategorize posts from the uncategorized category and give them a category of their own. I showed him how to make a link, add a picture, and some very simple basics. He even had to learn where and how to leave a comment, copying his whole blog posts into my blog comments to show them off, not realizing he could have just left a link. We all make mistakes along the way.
As I hit the road to speak at conferences and workshops, luckily he had my book, Blogging Tips, What Bloggers Won't Tell You About Blogging, a Christmas present, by his side to help him fend for himself through the murky, bloggy waters.
He jumped in, writing whatever story he wanted to share as he tried to explain himself to the world. He dug into his past and found some stories worth telling. After the first few terrific posts, the excitement faded. His interest turned elsewhere. Then he had what he called "My Recent Art Attack" which brought him running back to his blog to share his excitement with the world.
Besides being an incredible chef and cook, Duke is an amazing artist. Last year was his first gallery showing in Vancouver, Washington, and he has more lined up for this year. He collects odds and ends he finds everywhere and puts them together into small and large and fascinating art…sculptures, wall hangings, pictures, headboards, mirrors, furniture…things.
In "LORD of the THINGS" he describes himself, his history, personality, and his artwork this way:
"9 Blakely Way." That was the address of our home back in 1957; the year I was born. No NW, SW or Southeast just, "9 Blakely Way." We lived in a small housing project built from the 30's to the 40's which was on the outskirts of The Dalles, Oregon. It was a time of paper boys and the milkman, yes and Service Stations with .25 cent a gallon gas. Common was Mom charging groceries on a tab at the market and Dad working a couple of nights a week cleaning up the butcher shop to pay the bill.
Our home phone number was 6-9414; that's right, just 5 digits, no area codes or mandatory prefixes. Looking back I can honestly say it was a simpler time. I was born the last of six children and I admit I was a bit of a momma's boy. All of the others had a time when they were the baby, but it only lasted until the next uninvited child came along, but me, I didn't have that problem. No one came after me…
This meant I spent a lot of time hanging with my Mother and her other stay at home mom friends. I was a curious sort in my pre-school years and would ask questions like," Do trees have blood?"
I learned at a young age that there were treasures to be had if a boy would keep his eyes peeled and on the ground. It happened when I was walking the neighborhood. Something shiny caught my eye. It was a glorious silver dollar. It filled my hand out to the very edges of its span. It was embossed with stunning detail. Man, it was beautiful. I wanted to keep it for ever!
…Remembering this; from then on, when traveling by foot I always kept one eye on the ground. You never know what you might find. In my travels however the treasures seamed to be few and far between. Oh sure there were plenty of sticks, rocks and lizards to be had and I did revel in shinier, more magic ones. Sometimes my attention would be drawn to a particular stick or rock. I would pick them up and after surmising that they were of no particular worth and not possessing any magical powers. I would drop them back to the ground.
As I walked away I imagined the object pleading with me not to just leave them there. The stick would reason with me that by picking it up I had gotten it's hopes up. Perhaps it had dreamed of coming home with me, maybe even finding a nice cozy place in my room on the headboard of my bed or in a dresser drawer.
…Instead of being enslaved by the objects of my life, I like to think of myself as their Master. Maybe even the Lord of what I possess, heh… maybe even, like… the lord of my things. That's it! I am "The Lord of My Things. No wait, try this. "Lord of the Things". I like it! I am "Lord of the Things". More like a "Junk Whisperer," really.
We are swept away back to a time when a found coin, stick or rock could be a wondrous experience. To a time before huge grocery stores and department stores filled with plastic distractions. To a time when we were still close to the ground in age, size, and interest, pondering over the found wonders around us, evaluating the "magic" and usefulness in each one.
We are led through his story back to the present, as this now grandfather looks back over his life and realizes that he is the master of all he collects. Don't we all wish we were the master of the junk we collect in our lives. Yet, we learn and find value through his self-discovery process.
Which is a prime example of why I call Duke an example of a perfect personal blogger.
The Art of the Story
There are all kinds of blogs, and many definitions for the different types of blogs. The definition for me of a personal blog is one that tells a story, a personal story. It doesn't matter how the story is told, by words, pictures, video, cartoons, artwork, audio, or combination of all of them. Storytelling defines a personal blog as personal.
A personal blog helps the blogger tell their story, be it the story of their life or of a moment in time. It can be a rant about how X company pissed them off, or how they figured out how to successfully plant a rose bush this year. It can be a collection of random gossip about fellow students or co-workers, or an insightful collection of essays on food and cooking. It can be about a hobby, about school, work, raising children, being a parent, parenting parents, raising grandchildren, or sharing expertise on any subject – as long as it is about the personal experience.
A personal blog is about sharing personal stories with readers – readers that might be family, friends, or strangers.
It's also about focusing on the story, not the commercialism and monetization. The site may or may not have ads, but the blogger isn't obsessed about his or her stats, clickthroughs, and such.
It's about being personal, not distant, with the reader. It's about sharing. It's about the story.
Duke continues to post stories about his life and artwork, which are hard to separate from each other. Explaining how he thinks differently from most people, Duke explains with a great sense of humor in "Astronauts And Moon Pies:"
I am a humble Renaissance Man. Inventive and creative ideas are thrust at me like stones from outer space. Fortunately I am able to shield my brain quite effectively with a large screen plasma TV.
It's poetic. He also writes poetry on his site. In "DESERT TROUT," he describes his poetry like his artwork:
I write my poems like I sculpt… with bits and pieces…
In "My Recent Art Attack," Duke shows off his colorful and animated storytelling abilities, changing a typical "Sorry I haven't blogged in a while" into something entertaining and unique.
OK, I'm sorry! To the great multitude of my blog followers, I am truly sorry. It has been a very long time since I've posted anything and I know many of you were worried about me.
The rumors are true; I did have an Art Attack. It all started very suddenly and I wasn't able to call for help for months. My body is showing the signs of the wear and tear that such a major event can have on someone. For example. My belly is sticking out as far as it ever has and all my t-shirts are stained with paint and globs of glue.
One day I even found a screw behind my ear. I spent many long hours, hunkered down in my garage under hot lights with the fumes of thinners and spray paint.
I lived only on Diet Coke and sunflower seeds.
A well-told story is one that is visual, emotional, and features a great climax, a powerful point in the story. It's a rare talent to combine the visual arts and written arts with passion and style.
In the few short months since Duke started his blog, his stories, and artwork, has evolved. He shares the stories behind his artwork through his blog. RETRO-ACTIVE is about a new mirror wall hanging that features a tire hub cap he spent a couple hours pulling out of a river swim hole a couple years ago, combined with a microphone he bought at a rummage sale in 1970. Each of these two treasures in his "stash" of odds and ends have their own unique and fascinating stories, adding to the wealth of imagery and history behind the final piece.
The description of finally succeeding with family and sheer determination to wrangle the hub cap out of the river mud is a great description of self.
…So I went back at and after another hour was able to free it from it's watery grave. "Aah haaaa!" I yelled as I thrust it into the air along with an arch of river water trailing the motion as I waved it like a flag.
The people at the swim site did glance over at me for a second, then realizing it was just a crazy old pasty white guy with an enlarged, overly exposed belly, they quickly turned away.
I proudly sloshed my way up the bank and presented my trophy to my wife like a proud Golden Retriever with a freshly bagged duck in its mouth. She, in all her beauty and wisdom, said, "Nice, the trash can is over there."
"Are you kidding" I quipped. "This thing is awesome, I'm keeping it".
To which she replied, "What are you going to do with that thing?"
"I'm not sure, but I'm keeping it, thank you very much." And I did as you can see.
I can see the two of them having that conversation, she with a straight face and dry humor, a slight smile itching to be free, Duke determined and grinning proudly from ear to ear with amazing self-confidence.
A personal blog works when the walls are dropped. You can blog anonymously, but your words and stories are personal. They come from the heart – your heart – as you share yourself with others. The more transparent you are about who you are as a person, about your personality, your spirit, energy, thought process, beliefs, and the lessons learned, the more the reader can connect and relate.
It's not important they know who you really are. It's important that they know who you really are beyond a name and address and job. Duke is a great example as he is so willing to totally expose himself through his blog's words and images.
Duke's blog has also helped our family recall moments that would have been lost to time and age, part of the magic of a personal blog for other family members. Remembering my father, his "Uncle Bud," Duke wrote "The One Time I Kicked My Uncle Bud's Ass" telling a story I don't remember from my childhood.
It seems that he'd learned about using food coloring a short time before, turning a simple baked good into a something special with a few drops of food dye. He colored some peanut butter blue and fed it to my five year old brother. Duke was unaware my brother had a reputation for swallowing things and tucking things in body crevices, as some children do, that often required trips to the emergency room. My father took one look at the blue greasy smear on Duke's cousin's face and roared after the two boys.
Duke combines the memory with a great flash forward of understanding and compassion about how he would react if it were his child.
We all screeched to a stop and slowly turned to face him.
With his eyes bugged out about as far as any adult could possibly bug out their own eyes the scream turned into, "Oh My #@!%$&! What have you fed my kids?"
Our faces were frozen with fear and our hearts were trembling. I slowly looked over at my cousin Loren and saw his face smeared with this greasy blue paste.
I can only now as a parent myself begin to understand the horror that was going through his mind. When I think about how our faces must have looked. Any sane person could only surmise that we all had just eaten some sort of gasket sealer or toxic epoxy.
As you can imagine I tried to explain to him that it was only harmless blue peanut butter but it took several minutes before I was able to speak. Our leftover portions were quickly snatched from our mitts and I was soundly informed that I was never to feed another thing to my cousins… I sometimes like to think… this was the one time I had kicked my Uncle Bud's ass.
I love you Uncle Bud and I miss you…
My father died a couple years ago and the loss is with me every day, but his wonderful story made my father come alive again for a few moments. Stirring memories with good storytelling is the sign of a great storyteller.
While most of his current posts are about his artwork, filled with stories of how he creates them and the stories of the individual parts and pieces, the "things" in his artwork, he still loves telling just a good story.
In "Welcome To Christmas, Welcome To America," he shared a story about embracing immigrants in his community through his relationship with an immigrant co-worker. Knowing they didn't have much money, Duke brought them a Christmas tree that they could decorate and enjoy for the holidays only to find that they literally had nothing in their home. No furniture, television, nothing save a small kitchen table and single chair. Working with his church and community, he decided a tree wasn't enough.
…That night at home I told my wife about what I had seen and she and I agreed we had to do more than just a tree with no lights…After a couple days I made another appointment to visit with Dohn at his home again.
This time I was not alone. We had three cars and two trucks behind us. I knocked at the door and when it opened a precession of strangers began to enter with armfuls of items he and his family desperately needed.
…Few words were spoken while hands were grasped and arms draped around one another.
Many years have passed since the night we shared in that wonderful Christmas. I often wonder about Dohn and his family. I am sure he has been in a position to reach out and help someone in kind.
I do know this for sure. Anytime we reach out to help, and by so doing, lift a fellow human being, we ourselves are elevated.
Finding Your Own Voice in Your Own Blog
Duke didn't realize that he was on a journey when he started his blog. Neither did I, all those many years ago.
A blog, especially a personal blog, is a journey to find your voice, as well as to find yourself.
I may tease people when I ask them if they've taken a look at their blog categories lately. They'll look at me and ask, "I don't know what to blog about." I tell them to look at their categories and see what they've been blogging about the most, and blog that.
Blog your passion. You probably already are. It's that simple.
It's also that hard.
Blogging is a commitment. When you aren't blogging for bucks, it's also a discipline. You have to feed your blog. If you keep feeding it, it's amazing what you learn about yourself, isn't it?
Subscribe Via Feedburner Subscribe by Email
Copyright Lorelle VanFossen, member of the 9Rules Network, and author of Blogging Tips, What Bloggers Won't Tell You About Blogging.


text:
Girls Jacquard Puff Sleeve Belted Dress
Girls Jacquard Puff Sleeve Belted Dress
Product code: ACC03309
£49.00 £24.00
Product Information
Style Notes
- Style: Dress
- Fabric: Jacquard
Details & CareLENGTH 62.5CM WASH AT 40 DEGREES MAIN: 91% POLYESTER 5% METALLISED FIBRE 4% ELASTANE LINING: 100% POLYESTER
Delivery info
Delivery option Delivery times Delivery cost UK Standard Delivery Up to 4 working days (Delivery days Monday to Saturday) £4.99 per order UK Next Day Delivery Order before 10pm Monday to Sunday to receive your order next day (Delivery days Monday to Sunday) £5.99 per order DPD Predict Delivery Select your preferred day and DPD will advise of the 1hour delivery window £7.99 per order Evri Standard Parcel Collection Up to 4 working days (Delivery days Monday to Saturday) £4.99 per order Evri Next Day Parcel Collection Collection next day, arriving in shops after 12pm if ordered before 10pm (Delivery days Monday to Sunday) £5.99 per order Asda Next Day Parcel Collection Order before 8pm for next day collection, (Delivery is Monday - Saturday) £5.99 per order
Click here for further information.
Returns info
UK returns are £2.99 using the returns portal. £2.99 per parcel will be deducted from your refund amount. Returns are FREE for Coast VIP customers.
Orders placed between 17th November and 18th December can be returned until the 15th January 2023. Orders placed on or after 18th December have the usual 30 days to return.
Please note, we cannot offer refunds on pierced jewellery, lingerie or on swimwear if the hygiene seal is not in place or has been broken.
Click here to view our full Returns Policy.

subset: commoncrawl


text:
Chef Jeff Nathan is a celebrity in his own right. Yet… like his first, this second cookbook is not only easy to follow, unpretentious in tone, but above all, the results are delicious!
Cooking for the family, even on a normal weekday, is fun again. Yes, the recipes are kosher but they have that international flair that only someone of Chef Jeff Nathan's caliber, imagination, mastery of the mysteries of food preparation and understanding of the delicate flavor nuances of the various ingredients, could produce.
I've tried many of these book's recipes and liked them, to pick one as an example here is not easy. I'll find something that illustrates how well the New Jewish Cuisine has become a superb blend of the old traditions and the newest trends.
The recipes in this book have a relatively short cooking time, yet their tastes are not compromised. Everything we've tried was delicious!
So… what to choose to feature on this pages? I've tried the soup recipes like the Tuscan Vegetable Soup, the Chilled sweet Pepper and Pineapple Soup, the Sherried Cream of Mushroom Soup, any of these easily attests to the author's passion for food. But… I am basically a carnivore to the core, I will therefore give you one of the many mouthwatering meat recipes here.
Since hardly anything is more heimisch than a good brisket, I chose the following… heimisch yes, but with a twist. As I always liked cooking with wine or liqueur, this one's is my newest favorite:
Brisket with Port Wine and Mushrooms Sauce
Makes 7 to 10 Servings
Tender melt-in-your-mouth brisket is one of my favorite dishes to serve to friends and family. Every time I make it home I make it differently. My latest version simmers the meat in rich port wine with lots of mushrooms, so much the better for a deep, dark sauce that is made for pouring over noodles. It's a waste of time to make only a three pound brisket, so this recipe makes enough for precious leftovers. If you have the time, make the brisket the day ahead, which makes it easier to to slice thinly.
3 tablespoons canola oil
Two 3-pond first-cut beef briskets, trimmed
2 medium onions, halved lengthwise and thinly sliced into half-moons
8 garlic cloves, halved
13/4 cups tawny or ruby port
2 pounds assorted fresh mushrooms, sliced or quartered, depending on size
3 bay leaves
1/2 cup all-purpose flour
Kosher salt and freshly ground pepper to taste
1. Position a rack in the center of the oven and preheat at 325° F
2. Heat the oil in a very large, deep Dutch oven over medium-high heat.One at a time, add the briskets and cook. turning once, until browned on both sides, about 10 minutes. Transfer the brisket to a platter.
3. Add the onions and garlic to the pot and cook, stirring occasionally, until the onions are lightly browned, about 10 minutes. Add the port, mushrooms, and bay leaves and bring to a simmer, scraping up any browned bits in a pot with a wooden spoon. Simmer for 5 minutes. Return the briskets and any pieces on the platter to the pot. Add enough cold water to barely cover the briskets and bring to a simmer over high heat. Cover tightly. Place in the oven and bake until the briskets are fork-tender, about 2 hours and 15 minutes. Remove the bay leaves.
4. Uncover and let the brisket cool in the pot. Cover and refrigerate until the next day.
5. Scrape off and discard any hardened fat on the on the surface of the cooking liquid' Transfer the briskets to a carving board and slice thinly across the grain.
6. Meanwhile bring the cooking liquid to a boil over high heat. Taste, and if the flavor needs concentrating, boil for a few minutes to evaporate excess liquid.
7. Whisk the flower and water together in a medium bowl to dissolve the flour. Whisk in about 2 cups of the cooking liquid. Whisk this liquid into the pot.. Reduce the heat to medium-low and simmer until the the sauce thickens and has no raw flour taste, about 5 minutes. Season with salt and pepper. Return the sliced briskets to the sauce, and simmer until heated through, 5 to 10 minutes. Serve hot with the sauce.
Enjoy, we certainly did!


text:
Catalyst - The Elegant MVC Web Application Framework
See the Catalyst::Manual distribution for comprehensive documentation and tutorials.
# Install Catalyst::Devel for helpers and other development tools
# use the helper to create a new application
catalyst.pl MyApp
# add models, views, controllers
script/myapp_create.pl model MyDatabase DBIC::Schema create=static dbi:SQLite:/path/to/db
script/myapp_create.pl view MyTemplate TT
script/myapp_create.pl controller Search
# built in testserver -- use -r to restart automatically on changes
# --help to see all available options
# command line testing interface
script/myapp_test.pl /yada
### in lib/MyApp.pm
use Catalyst qw/-Debug/; # include plugins here as well
### In lib/MyApp/Controller/Root.pm (autocreated)
sub foo : Chained('/') Args() { # called for /foo, /foo/1, /foo/1/2, etc.
my ( $self, $c, @args ) = @_; # args are qw/1 2/ for /foo/1/2
$c->stash->{template} = 'foo.tt'; # set the template
# lookup something from db -- stash vars are passed to TT
$c->stash->{data} =
$c->model('Database::Foo')->search( { country => $args[0] } );
if ( $c->req->params->{bar} ) { # access GET or POST parameters
$c->forward( 'bar' ); # process another action
# do something else after forward returns
# The foo.tt TT template can use the stash data from the database
[% WHILE (item = data.next) %]
[% item.foo %]
# called for /bar/of/soap, /bar/of/soap/10, etc.
sub bar : Chained('/') PathPart('/bar/of/soap') Args() { ... }
# called after all actions are finished
sub end : Action {
my ( $self, $c ) = @_;
if ( scalar @{ $c->error } ) { ... } # handle errors
return if $c->res->body; # already have a response
$c->forward( 'MyApp::View::TT' ); # render template
See Catalyst::Manual::Intro for additional information.
Catalyst is a modern framework for making web applications without the pain usually associated with this process. This document is a reference to the main Catalyst application. If you are a new user, we suggest you start with Catalyst::Manual::Tutorial or Catalyst::Manual::Intro.
See Catalyst::Manual for more documentation.
Catalyst plugins can be loaded by naming them as arguments to the "use Catalyst" statement. Omit the Catalyst::Plugin:: prefix from the plugin name, i.e., Catalyst::Plugin::My::Module becomes My::Module.
use Catalyst qw/My::Module/;
If your plugin starts with a name other than Catalyst::Plugin::, you can fully qualify the name by using a unary plus:
use Catalyst qw/
Special flags like -Debug can also be specified as arguments when Catalyst is loaded:
use Catalyst qw/-Debug My::Module/;
The position of plugins and flags in the chain is important, because they are loaded in the order in which they appear.
The following flags are supported:
Enables debug output. You can also force this setting from the system environment with CATALYST_DEBUG or <MYAPP>_DEBUG. The environment settings override the application, with <MYAPP>_DEBUG having the highest priority.
This sets the log level to 'debug' and enables full debug output on the error screen. If you only want the latter, see $c->debug.
Forces Catalyst to use a specific home directory, e.g.:
use Catalyst qw[-Home=/usr/mst];
This can also be done in the shell environment by setting either the CATALYST_HOME environment variable or MYAPP_HOME; where MYAPP is replaced with the uppercased name of your application, any "::" in the name will be replaced with underscores, e.g. MyApp::Web should use MYAPP_WEB_HOME. If both variables are set, the MYAPP_HOME one will be used.
If none of these are set, Catalyst will attempt to automatically detect the home directory. If you are working in a development environment, Catalyst will try and find the directory containing either Makefile.PL, Build.PL or dist.ini. If the application has been installed into the system (i.e. you have done make install), then Catalyst will use the path to your application module, without the .pm extension (e.g., /foo/MyApp if your application was installed at /foo/MyApp.pm)
make install
use Catalyst '-Log=warn,fatal,error';
Specifies a comma-delimited list of log levels.
Enables statistics collection and reporting.
use Catalyst qw/-Stats=1/;
You can also force this setting from the system environment with CATALYST_STATS or <MYAPP>_STATS. The environment settings override the application, with <MYAPP>_STATS having the highest priority.
Stats are also enabled if debugging is enabled.
Returns a Catalyst::Action object for the current action, which stringifies to the action name. See Catalyst::Action.
Returns the namespace of the current action, i.e., the URI prefix corresponding to the controller of the current action. For example:
# in Controller::Foo::Bar
$c->namespace; # returns 'foo/bar';
Returns the current Catalyst::Request object, giving access to information about the current client request (including parameters, cookies, HTTP headers, etc.). See Catalyst::Request.
Forwards processing to another action, by its private name. If you give a class name but no method, process() is called. You may also optionally pass arguments in an arrayref. The action will receive the arguments in @_ and $c->req->args. Upon returning from the function, $c->req->args will be restored to the previous values.
Any data returned from the action forwarded to, will be returned by the call to forward.
my $foodata = $c->forward('/foo');
$c->forward(qw/Model::DBIC::Foo do_stuff/);
Note that forward implies an eval { } around the call (actually execute does), thus rendering all exceptions thrown by the called action non-fatal and pushing them onto $c->error instead. If you want die to propagate you need to do something like:
eval { }
die join "\n", @{ $c->error } if @{ $c->error };
Or make sure to always return true values from your actions and write your code like this:
$c->forward('foo') || return;
Another note is that $c->forward always returns a scalar because it actually returns $c->state which operates in a scalar context. Thus, something like:
return @array;
in an action that is forwarded to is going to return a scalar, i.e. how many items are in that array, which is probably not what you want. If you need to return an array then return a reference to it, or stash it like so:
$c->stash->{array} = \@array;
and access it from the stash.
Keep in mind that the end method used is that of the caller action. So a $c->detach inside a forwarded action would run the end method from the original action requested.
The same as forward, but doesn't return to the previous action when processing is finished.
When called with no arguments it escapes the processing chain entirely.
Almost the same as forward, but does a full dispatch, instead of just calling the new $action / $class->$method. This means that begin, auto and the method you go to are called, just like a new request.
In addition both $c->action and $c->namespace are localized. This means, for example, that $c->action methods such as name, class and reverse return information for the visited action when they are invoked within the visited action. This is different from the behavior of forward, which continues to use the $c->action object from the caller action even when invoked from the called action.
$c->stash is kept unchanged.
In effect, visit allows you to "wrap" another action, just as it would have been called by dispatching from a URL, while the analogous go allows you to transfer control to another action as if it had been reached directly from a URL.
The relationship between go and visit is the same as the relationship between forward and detach. Like $c->visit, $c->go will perform a full dispatch on the specified action or method, with localized $c->action and $c->namespace. Like detach, go escapes the processing of the current request chain on completion, and does not return to its caller.
@arguments are arguments to the final destination of $action. @captures are arguments to the intermediate steps, if any, on the way to the final sub of $action.
Returns the current Catalyst::Response object, see there for details.
Returns a hashref to the stash, which may be used to store data and pass it between components during a request. You can also set hash keys by passing arguments. The stash is automatically sent to the view. The stash is cleared at the end of a request; it cannot be used for persistent storage (for this you must use a session; see Catalyst::Plugin::Session for a complete system integrated with Catalyst).
$c->stash->{foo} = $bar;
$c->stash( { moose => 'majestic', qux => 0 } );
$c->stash( bar => 1, gorch => 2 ); # equivalent to passing a hashref
# stash is automatically passed to the view for use in a template
$c->forward( 'MyApp::View::TT' );
Returns an arrayref containing error messages. If Catalyst encounters an error while processing a request, it stores the error in $c->error. This method should only be used to store fatal error messages.
my @error = @{ $c->error };
Add a new error.
$c->error('Something bad happened');
Contains the return value of the last executed action. Note that << $c->state >> operates in a scalar context which means that all values it returns are scalar.
Clear errors. You probably don't want to clear the errors unless you are implementing a custom error screen.
This is equivalent to running
Gets a Catalyst::Controller instance by name.
If the name is omitted, will return the controller for the dispatched action.
If you want to search for controllers, pass in a regexp as the argument.
# find all controllers that start with Foo
my @foo_controllers = $c->controller(qr{^Foo});
Gets a Catalyst::Model instance by name.
Any extra arguments are directly passed to ACCEPT_CONTEXT.
If the name is omitted, it will look for - a model object in $c->stash->{current_model_instance}, then - a model name in $c->stash->{current_model}, then - a config setting 'default_model', or - check if there is only one model, and return it if that's the case.
If you want to search for models, pass in a regexp as the argument.
# find all models that start with Foo
my @foo_models = $c->model(qr{^Foo});
Gets a Catalyst::View instance by name.
If the name is omitted, it will look for - a view object in $c->stash->{current_view_instance}, then - a view name in $c->stash->{current_view}, then - a config setting 'default_view', or - check if there is only one view, and return it if that's the case.
If you want to search for views, pass in a regexp as the argument.
# find all views that start with Foo
my @foo_views = $c->view(qr{^Foo});
Returns the available names which can be passed to $c->controller
Returns the available names which can be passed to $c->model
Returns the available names which can be passed to $c->view
Gets a component object by name. This method is not recommended, unless you want to get a specific component by full class. $c->controller, $c->model, and $c->view should be used instead.
If $name is a regexp, a list of components matched against the full component name will be returned.
If Catalyst can't find a component by name, it will fallback to regex matching by default. To disable this behaviour set disable_component_resolution_regex_fallback to a true value.
__PACKAGE__->config( disable_component_resolution_regex_fallback => 1 );
Returns or takes a hashref containing the application's configuration.
__PACKAGE__->config( { db => 'dsn:SQLite:foo.db' } );
You can also use a YAML, XML or Config::General config file like myapp.conf in your applications home directory. See Catalyst::Plugin::ConfigLoader.
The config method is present on all Catalyst components, and configuration will be merged when an application is started. Configuration loaded with Catalyst::Plugin::ConfigLoader takes precedence over other configuration, followed by configuration in your top level MyApp class. These two configurations are merged, and then configuration data whose hash key matches a component name is merged with configuration for that component.
The configuration for a component is then passed to the new method when a component is constructed.
For example:
MyApp->config({ 'Model::Foo' => { bar => 'baz', overrides => 'me' } });
MyApp::Model::Foo->config({ quux => 'frob', overrides => 'this' });
will mean that MyApp::Model::Foo receives the following data when constructed:
bar => 'baz',
quux => 'frob',
overrides => 'me',
It's common practice to use a Moose attribute on the receiving component to access the config value.
package MyApp::Model::Foo;
use Moose;
# this attr will receive 'baz' at construction time
has 'bar' => (
is => 'rw',
isa => 'Str',
You can then get the value 'baz' by calling $c->model('Foo')->bar (or $self->bar inside code in the model).
NOTE: you MUST NOT call $self->config or __PACKAGE__->config as a way of reading config within your code, as this will not give you the correctly merged config back. You MUST take the config values supplied to the constructor and use those instead.
Returns the logging object instance. Unless it is already set, Catalyst sets this up with a Catalyst::Log object. To use your own log class, set the logger with the __PACKAGE__->log method prior to calling __PACKAGE__->setup.
__PACKAGE__->log( MyLogger->new );
And later:
$c->log->info( 'Now logging with my own logger!' );
Your log class should implement the methods described in Catalyst::Log.
Returns 1 if debug mode is enabled, 0 otherwise.
You can enable debug mode in several ways:
sub debug { 1 }
The first three also set the log level to 'debug'.
Calling $c->debug(1) has no effect.
Returns the dispatcher instance. See Catalyst::Dispatcher.
Returns the engine instance. See Catalyst::Engine.
Merges @path with $c->config->{home} and returns a Path::Class::Dir object. Note you can usually use this object as a filename, but sometimes you will have to explicitly stringify it yourself by calling the ->stringify method.
$c->path_to( 'db', 'sqlite.db' );
Initializes the dispatcher and engine, loads any plugins, and loads the model, view, and controller components. You may also specify an array of plugins to load here, if you choose to not load them in the use Catalyst line.
use Catalyst
MyApp->setup( qw/-Debug/ );
Note: You should not wrap this method with method modifiers or bad things will happen - wrap the setup_finalize method instead.
A hook to attach modifiers to. This method does not do anything except set the setup_finished accessor.
Applying method modifiers to the setup method doesn't work, because of quirky things done for plugin setup.
after setup_finalize => sub {
my $app = shift;
## do stuff here..
Constructs an absolute URI object based on the application root, the provided path, and the additional arguments and query parameters provided. When used as a string, provides a textual URI. If you need more flexibility than this (i.e. the option to provide relative URIs etc.) see Catalyst::Plugin::SmartURI.
If no arguments are provided, the URI for the current action is returned. To return the current action and also provide @args, use $c->uri_for( $c->action, @args ).
$c->uri_for( $c->action, @args )
If the first argument is a string, it is taken as a public URI path relative to $c->namespace (if it doesn't begin with a forward slash) or relative to the application root (if it does). It is then merged with $c->request->base; any @args are appended as additional path components; and any %query_values are appended as ?foo=bar parameters.
If the first argument is a Catalyst::Action it represents an action which will have its path resolved using $c->dispatcher->uri_for_action. The optional \@captures argument (an arrayref) allows passing the captured variables that are needed to fill in the paths of Chained and Regex actions; once the path is resolved, uri_for continues as though a path was provided, appending any arguments or parameters and creating an absolute URI.
The captures for the current request can be found in $c->request->captures, and actions can be resolved using Catalyst::Controller->action_for($name). If you have a private action path, use $c->uri_for_action instead.
# Equivalent to $c->req->uri
$c->uri_for($c->action, $c->req->captures,
@{ $c->req->args }, $c->req->params);
# For the Foo action in the Bar controller
# Path to a static resource
A private path to the Catalyst action you want to create a URI for.
This is a shortcut for calling $c->dispatcher->get_action_by_path($path) and passing the resulting $action and the remaining arguments to $c->uri_for.
You can also pass in a Catalyst::Action object, in which case it is passed to $c->uri_for.
Note that although the path looks like a URI that dispatches to the wanted action, it is not a URI, but an internal path to that action.
For example, if the action looks like:
package MyApp::Controller::Users;
sub lst : Path('the-list') {}
You can use:
and it will create the URI /users/the-list.
Optional array reference of Captures (i.e. <CaptureArgs or $c-req->captures>) and arguments to the request. Usually used with Catalyst::DispatchType::Chained to interpolate all the parameters in the URI.
<CaptureArgs or $c-
Optional list of extra arguments - can be supplied in the \@captures_and_args? array ref, or here - whichever is easier for your code.
Your action can have zero, a fixed or a variable number of args (e.g. Args(1) for a fixed number or Args() for a variable number)..
Optional array reference of query parameters to append. E.g.
{ foo => 'bar' }
will generate
Returns the Catalyst welcome HTML page.
Contains a hash of options passed from the application script, including the original ARGV the script received, the processed values from that ARGV and any extra arguments to the script which were not processed.
This can be used to add custom options to your application's scripts and setup your application differently depending on the values of these options.
These methods are not meant to be used by end users.
Returns a hash of components.
Returns or sets the context class.
Returns a hashref containing coderefs and execution counts (needed for deep recursion detection).
Returns the number of actions on the current internal execution stack.
Dispatches a request to actions.
Returns or sets the dispatcher class.
Returns a list of 2-element array references (name, structure) pairs that will be dumped on the error page in debug mode.
Returns or sets the engine class.
Execute a coderef in given class and catch exceptions. Errors are available via $c->error.
Finalizes the request.
Finalizes body.
Finalizes cookies.
Finalizes error.
Finalizes headers.
An alias for finalize_body.
Finalizes the input after reading is complete.
Finalizes uploads. Cleans up any temporary files.
Gets an action in a given namespace.
Gets all actions of a given name in a namespace and all parent namespaces.
Called to handle each HTTP request.
Creates a Catalyst context from an engine-specific request (Apache, CGI, etc.).
Prepares action. See Catalyst::Dispatcher.
Prepares message body.
Prepares a chunk of data before sending it to HTTP::Body.
See Catalyst::Engine.
Prepares body parameters.
Prepares connection.
Prepares cookies by ensuring that the attribute on the request object has been built.
Prepares request headers by ensuring that the attribute on the request object has been built.
Prepares parameters.
Prepares path and base.
Prepares query parameters.
Writes information about the request to the debug logs. This includes:
Request method, path, and remote IP address
Query keywords (see "query_keywords" in Catalyst::Request)
Request parameters
File uploads
Writes information about the response to the debug logs by calling $c->log_response_status_line and $c->log_response_headers.
Writes one line of information about the response to the debug logs. This includes:
Response status code
Content-Type header (if present)
Content-Length header (if present)
Hook method which can be wrapped by plugins to log the response headers. No-op in the default implementation.
Logs request parameters to debug logs
Logs file uploads included in the request to the debug logs. The parameter name, filename, file type, and file size are all included in the debug logs.
Hook method which can be wrapped by plugins to log the request headers. No-op in the default implementation.
Logs HTTP::Headers (either request or response) to the debug logs.
Prepares the input for reading.
Prepares the engine request.
Prepares uploads.
Prepares the output for writing.
Returns or sets the request class. Defaults to Catalyst::Request.
Returns or sets the response class. Defaults to Catalyst::Response.
Reads a chunk of data from the request body. This method is designed to be used in a while loop, reading $maxlength bytes on every call. $maxlength defaults to the size of the request if not specified.
You have to set MyApp->config(parse_on_demand => 1) to use this directly.
MyApp->config(parse_on_demand => 1)
Warning: If you use read(), Catalyst will not process the body, so you will not be able to access POST parameters or file uploads via $c->request. You must handle all body parsing yourself.
Starts the engine.
Sets an action in a given namespace.
Sets up actions for a component.
This method is called internally to set up the application's components.
It finds modules by calling the locate_components method, expands them to package names with the expand_component_module method, and then installs each component into the application.
The setup_components config option is passed to both of the above methods.
Installation of each component is performed by the setup_component method, below.
This method is meant to provide a list of component modules that should be setup for the application. By default, it will use Module::Pluggable.
Specify a setup_components config option to pass additional options directly to Module::Pluggable. To add additional search paths, specify a key named search_extra as an array reference. Items in the array beginning with :: will have the application class name prepended to them.
Components found by locate_components will be passed to this method, which is expected to return a list of component (package) names to be set up.
Sets up dispatcher.
Sets up engine.
Adds the following Plack middlewares to your application, since they are useful and commonly needed:
Plack::Middleware::ReverseProxy, (conditionally added based on the status of your $ENV{REMOTE_ADDR}, and can be forced on with using_frontend_proxy or forced off with ignore_frontend_proxy), Plack::Middleware::LighttpdScriptNameFix (if you are using Lighttpd), Plack::Middleware::IIS6ScriptNameFix (always applied since this middleware is smart enough to conditionally apply itself).
Additionally if we detect we are using Nginx, we add a bit of custom middleware to solve some problems with the way that server handles $ENV{PATH_INFO} and $ENV{SCRIPT_NAME}
Returns a PSGI application code reference for the catalyst application $c. This is the bare application without any middlewares applied. ${myapp}.psgi is not taken into account.
This is what you want to be using to retrieve the PSGI application code reference of your Catalyst application for use in .psgi files.
Sets up the home directory.
Sets up log by instantiating a Catalyst::Log object and passing it to log(). Pass in a comma-delimited list of levels to set the log to.
This method also installs a debug method that returns a true value into the catalyst subclass if the "debug" level is passed in the comma-delimited list, or if the $CATALYST_DEBUG environment variable is set to a true value.
Note that if the log has already been setup, by either a previous call to setup_log or by a call such as __PACKAGE__->log( MyLogger->new ), that this method won't actually set up the log object.
__PACKAGE__->log( MyLogger->new )
Sets up plugins.
Sets up timing statistics class.
Returns a sorted list of the plugins which have either been stated in the import list.
If passed a given plugin name, it will report a boolean value indicating whether or not that plugin is loaded. A fully qualified name is required if the plugin name does not begin with Catalyst::Plugin::.
if ($c->registered_plugins('Some::Plugin')) {
Returns an arrayref of the internal execution stack (actions that are currently executing).
Returns the current timing statistics object. By default Catalyst uses Catalyst::Stats, but can be set otherwise with stats_class.
Even if -Stats is not enabled, the stats object is still available. By enabling it with $c-stats->enabled(1) >, it can be used to profile explicitly, although MyApp.pm still won't profile nor output anything by itself.
Returns or sets the stats (timing statistics) class. Catalyst::Stats is used by default.
Returns 1 when stats collection is enabled.
Note that this is a static method, not an accessor and should be overridden by declaring sub use_stats { 1 } in your MyApp.pm, not by calling $c->use_stats(1).
sub use_stats { 1 }
Writes $data to the output stream. When using this method directly, you will need to manually set the Content-Length header to the length of your output data, if known.
Returns the Catalyst version number. Mostly useful for "powered by" messages in template systems.
There are a number of 'base' config variables which can be set:
default_model - The default model picked if you say $c->model. See "$c->model($name)".
default_view - The default view to be rendered or returned when $c->view is called. See "$c->view($name)".
disable_component_resolution_regex_fallback - Turns off the deprecated component resolution functionality so that if any of the component methods (e.g. $c->controller('Foo')) are called then regex search will not be attempted on string values and instead undef will be returned.
home - The application home directory. In an uninstalled application, this is the top level application directory. In an installed application, this will be the directory containing MyApp.pm.
ignore_frontend_proxy - See "PROXY SUPPORT"
name - The name of the application in debug messages and the debug and welcome screens
parse_on_demand - The request body (for example file uploads) will not be parsed until it is accessed. This allows you to (for example) check authentication (and reject the upload) before actually receiving all the data. See "ON-DEMAND PARSER"
root - The root directory for templates. Usually this is just a subdirectory of the home directory, but you can set it to change the templates to a different directory.
search_extra - Array reference passed to Module::Pluggable to for additional namespaces from which components will be loaded (and constructed and stored in $c->components).
show_internal_actions - If true, causes internal actions such as _DISPATCH to be shown in hit debug tables in the test server.
use_request_uri_for_path - Controls if the REQUEST_URI or PATH_INFO environment variable should be used for determining the request path.
Most web server environments pass the requested path to the application using environment variables, from which Catalyst has to reconstruct the request base (i.e. the top level path to / in the application, exposed as $c->request->base) and the request path below that base.
There are two methods of doing this, both of which have advantages and disadvantages. Which method is used is determined by the $c->config(use_request_uri_for_path) setting (which can either be true or false).
This is the default (and the) traditional method that Catalyst has used for determining the path information. The path is generated from a combination of the PATH_INFO and SCRIPT_NAME environment variables. The allows the application to behave correctly when mod_rewrite is being used to redirect requests into the application, as these variables are adjusted by mod_rewrite to take account for the redirect.
However this method has the major disadvantage that it is impossible to correctly decode some elements of the path, as RFC 3875 says: "Unlike a URI path, the PATH_INFO is not URL-encoded, and cannot contain path-segment parameters." This means PATH_INFO is always decoded, and therefore Catalyst can't distinguish / vs %2F in paths (in addition to other encoded values).
Unlike a URI path, the PATH_INFO is not URL-encoded, and cannot contain path-segment parameters.
This method uses the REQUEST_URI and SCRIPT_NAME environment variables. As REQUEST_URI is never decoded, this means that applications using this mode can correctly handle URIs including the %2F character (i.e. with AllowEncodedSlashes set to On in Apache).
Given that this method of path resolution is provably more correct, it is recommended that you use this unless you have a specific need to deploy your application in a non-standard environment, and you are aware of the implications of not being able to handle encoded URI paths correctly.
However it also means that in a number of cases when the app isn't installed directly at a path, but instead is having paths rewritten into it (e.g. as a .cgi/fcgi in a public_html directory, with mod_rewrite in a .htaccess file, or when SSI is used to rewrite pages into the app, or when sub-paths of the app are exposed at other URIs than that which the app is 'normally' based at with mod_rewrite), the resolution of $c->request->base will be incorrect.
using_frontend_proxy - See "PROXY SUPPORT".
Catalyst uses internal actions like _DISPATCH, _BEGIN, _AUTO, _ACTION, and _END. These are by default not shown in the private action table, but you can make them visible with a config parameter.
MyApp->config(show_internal_actions => 1);
The request body is usually parsed at the beginning of a request, but if you want to handle input yourself, you can enable on-demand parsing with a config parameter.
MyApp->config(parse_on_demand => 1);
Many production servers operate using the common double-server approach, with a lightweight frontend web server passing requests to a larger backend server. An application running on the backend server must deal with two problems: the remote user always appears to be 127.0.0.1 and the server's hostname will appear to be localhost regardless of the virtual host that the user connected through.
Catalyst will automatically detect this situation when you are running the frontend and backend servers on the same machine. The following changes are made to the request.
$c->req->address is set to the user's real IP address, as read from
the HTTP X-Forwarded-For header.
The host value for $c->req->base and $c->req->uri is set to the real
host, as read from the HTTP X-Forwarded-Host header.
Additionally, you may be running your backend application on an insecure connection (port 80) while your frontend proxy is running under SSL. If there is a discrepancy in the ports, use the HTTP header X-Forwarded-Port to tell Catalyst what port the frontend listens on. This will allow all URIs to be created properly.
In the case of passing in:
X-Forwarded-Port: 443
All calls to uri_for will result in an https link, as is expected.
Obviously, your web server must support these headers for this to work.
In a more complex server farm environment where you may have your frontend proxy server(s) on different machines, you will need to set a configuration option to tell Catalyst to read the proxied data from the headers.
MyApp->config(using_frontend_proxy => 1);
If you do not wish to use the proxy support at all, you may set:
MyApp->config(ignore_frontend_proxy => 0);
Note that if you supply your own .psgi file, calling MyApp->psgi_app(@_);, then this will not happen automatically.
You either need to apply Plack::Middleware::ReverseProxy yourself in your psgi, for example:
builder {
enable "Plack::Middleware::ReverseProxy";
This will unconditionally add the ReverseProxy support, or you need to call $app = MyApp->apply_default_middlewares($app) (to conditionally apply the support depending upon your config).
$app = MyApp->apply_default_middlewares($app)
See Catalyst::PSGI for more information.
Catalyst has been tested under Apache 2's threading mpm_worker, mpm_winnt, and the standalone forking HTTP server on Windows. We believe the Catalyst core to be thread-safe.
If you plan to operate in a threaded environment, remember that all other modules you are using must also be thread-safe. Some modules, most notably DBD::SQLite, are not thread-safe.
Join #catalyst on irc.perl.org.
Mailing Lists:
sri: Sebastian Riedel <email@example.com>
abw: Andy Wardley
acme: Leon Brocard <email@example.com>
abraxxa: Alexander Hartmaier <firstname.lastname@example.com>
Andrew Bramble
Andrew Ford <email@example.com>
Andrew Ruthven
andyg: Andy Grundman <email@example.com>
audreyt: Audrey Tang
bricas: Brian Cassidy <firstname.lastname@example.com>
Caelum: Rafael Kitover <firstname.lastname@example.com>
chansen: Christian Hansen
chicks: Christopher Hicks
Chisel Wright firstname.lastname@example.com
Danijel Milicevic firstname.lastname@example.com
David Kamholz <firstname.lastname@example.com>
David Naughton, email@example.com
David E. Wheeler
dhoss: Devin Austin <email@example.com>
dkubb: Dan Kubb <email@example.com>
Drew Taylor
dwc: Daniel Westermann-Clark <email@example.com>
esskar: Sascha Kiefer
fireartist: Carl Franks <email@example.com>
frew: Arthur Axel "fREW" Schmidt <email@example.com>
gabb: Danijel Milicevic
Gary Ashton Jones
Gavin Henry firstname.lastname@example.com
Geoff Richards
groditi: Guillermo Roditi <email@example.com>
hobbs: Andrew Rodland <email@example.com>
ilmari: Dagfinn Ilmari Mannsåker <email@example.com>
jcamacho: Juan Camacho
jester: Jesse Sheidlower firstname.lastname@example.com
jhannah: Jay Hannah <firstname.lastname@example.com>
Jody Belka
Johan Lindstrom
jon: Jon Schutz <firstname.lastname@example.com>
Jonathan Rockway <firstname.lastname@example.com>
Kieren Diment firstname.lastname@example.com
konobi: Scott McWhirter <firstname.lastname@example.com>
marcus: Marcus Ramberg <email@example.com>
miyagawa: Tatsuhiko Miyagawa <firstname.lastname@example.com>
mst: Matt S. Trout <email@example.com>
mugwump: Sam Vilain
naughton: David Naughton
ningu: David Kamholz <email@example.com>
nothingmuch: Yuval Kogman <email@example.com>
numa: Dan Sully <firstname.lastname@example.com>
obra: Jesse Vincent
Octavian Rasnita
omega: Andreas Marienborg
Oleg Kostyuk <email@example.com>
phaylon: Robert Sedlacek <email@example.com>
rafl: Florian Ragwitz <email@example.com>
random: Roland Lammel <email@example.com>
Robert Sedlacek <email@example.com>
SpiceMan: Marcel Montes
sky: Arthur Bergman
szbalint: Balint Szilakszi <firstname.lastname@example.com>
t0m: Tomas Doran <firstname.lastname@example.com>
Ulf Edvinsson
Viljo Marrandi email@example.com
Will Hawes email@example.com
willert: Sebastian Willert <firstname.lastname@example.com>
wreis: Wallace Reis <firstname.lastname@example.com>
Yuval Kogman, email@example.com
rainboxx: Matthias Dietrich, email@example.com
dd070: Dhaval Dhanani <firstname.lastname@example.com>
Copyright (c) 2005, the above named PROJECT FOUNDER and CONTRIBUTORS.
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
To install Catalyst::Runtime, copy and paste the appropriate command in to your terminal.
cpanm Catalyst::Runtime
CPAN shell
perl -MCPAN -e shell
install Catalyst::Runtime
For more information on module installation, please visit the detailed CPAN module installation guide.


text:
Lisa Schwartz
I am the Learning Materials Editor and Coordinator for the Tree of Life Web Project. My work and interests focus on connecting scientists to k-12 learners and the general public by helping to create inquiry-based learning communities that are responsive to the needs and concerns of all members. As the ToL Learning Materials Editor I work with teachers, students, science enthusiasts, as well as science outreach organizations and scientists on the creation of Treehouses (learning materials). I also develop the system and interface for the treehouse building tools with our programmer, create learning materials, lessons and evaluation tools, and work to get more people involved in the program. Additionally, I collaborate with several Graduate Research Assistants and Interns who work with local schools and assist resource development.
As an educator, I have taught and worked with high school and elementary school students and teachers in diverse settings in Tucson, San Francisco, Ecuador and Israel. My teaching focus is on integrating science and technology with all areas of the curriculum. In the past I have concentrated on the use of school gardens and habitats to provide inquiry-based learning opportunities for students and combined such activities with the use of technology to discover, document, reflect upon, and share such projects.
I have a MA in Latin American Studies and Education from the University of Arizona (UA). I am currently a PhD student in the UA Department of Language Reading and Culture. For my MA thesis work, I examined student involvement in inquiry-based projects, and conducted research on the use of school gardens for science learning at several elementary school sites in Tucson and a few in Habana, Cuba. As I continue my studies I plan to focus on how online learning communities can promote real world opportunities for learning as well as for preserving and fostering biological and cultural diversity.
|Contributor Type:
|Treehouse Contributor
|University of Arizona
|Published Tree of Life Pages:
|View pages
|Tree of Life Media Files:
|View media
|Class Projects:
|View projects (and their published treehouses)
|Contributor ID:


text:
Sapna Cheryan on Stereotypes as Gatekeepers
Posted by The Situationist Staff on May 29, 2012
TEDxTalks on Apr 27, 2010 Stereotypes as Gatekeepers –
Sapna Cheryans research broadly examines how cultural stereotypes impact peoples choices and behaviors. She is particularly interested in the role that stereotypes play in determining peoples sense of belonging to important social groups.
In this talk, she asks why do women consider a future in computer science to a lesser extent than men? Might this be because the powerful image of the male computer geek makes women feel like they do not belong in the field?
A sample of related Situationist posts:
- The Nerdy, Gendered Situation of Computer Science
- The Situation of "Opting Out"
- The Gendered Situation of Science & Math
- The Situation of Sexism
- Sexual Harassment at Wal-Mart?
- Women's Situation in Economics
Rate this:
This entry was posted on May 29, 2012 at 3:13 pm and is filed under Ideology, Implicit Associations, Social Psychology, Video. Tagged: gender, social cognition, Social Psychology, stereotypes. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


text:
Total Items:10035Mrs Styles Age 30-40 Youngsters Medical Wig Bob Styles Long Straight Styles Long Curly Styles Halloween & Party Dreadlock & Afro Cosplay Men's Wig
Top Pieces Hair Extensions Half Wigs Fringes Ponytail Buns Other Accessories
Pet Wigs Doll Wigs Care Products Colour Chart
Characters Occupations Uniforms Occasions/Festival Halloween Christmas Others
|Business Calendar
|Jun 2023
|Holidays in red
Please select a colour theme
|Party/Special|Cosplay(Heat Stylelable)|Costume|
The wig is made of a single basic colour.
The wig has a dark base with lighter highlights(HL).
The wig has dark roots with lighter tips.
The wig is made of a blend(1:1) of two Colours.
The wig is made of a single fancy colour such as Hot Pink and Neon Yellow.
These colours are available to specific items only.
Cosplay(Heat Stylelable)See effects
These colours are available to Cosplay styles and Specific items only.
Due to screen colour limitation and different settings, please understand that the actual colours of the fibres may vary slightly from the images displayed here.
50% off for DARKEST BROWN, ASH BROWN, AUBURN, BLACK, 5 size wigs only.
Colour selected:
Ash Brown
Item Code: W-758
Length: ~27cm
Weight: ~74 g


text:
A team of two dentists who specialize in the treatment of foreign patients, both are members of the American Dental Association.
Aesthetic Rehabilitation and Implants
Endodontics and Aesthetic Dentistry
This information is intended for general information only and should not be considered as medical advice on the part of Health-Tourism.com. Any decision on medical treatments, after-care or recovery should be done solely upon proper consultation and advice of a qualified physician.
What is a Filling?
A filling is a method of restoring to a tooth damaged by decay back to its normal shape and function. When a dentist offers you a filling, he or she first gets rid of the decayed tooth material, cleans the damaged part, after which uses a filling material to fill the cleaned out the cavity.
No one kind of filling is best for everybody. What is best for you will depend on the extent of the repair, whether you have allergic reactions to particular materials, where in your mouth the filling is required, and the cost. Things to consider for different materials are:
If a fracture or decay has damaged a huge portion of the tooth, a cap, or a crown, might be recommended. Decay, which has reached the nerve, might be treated in two ways: through a procedure known as pulp capping or through root canal therapy.
If your dentist chooses to fill a cavity, he or she will first get rid of the decay and clean the affected part. The cleaned-out cavity will then be filled with any of the range of materials outlined above.
Only your dentist will detect whether you have a cavity that should be filled. During a check-up, your dentist will use a small mirror to check out the surfaces of every tooth.
Whatever appears abnormal will then be closely examined with special instruments. The kind of treatment your dentist decides on is determined by the scope of damage brought about by decay.
Indirect fillings are much like tooth-colored or composite fillings except they are produced in a dental laboratory and need two visits before being placed. Indirect fillings are considered when insufficient tooth structure remains to support a filling, but the tooth isn't so seriously damaged that it requires a crown.
Temporary fillings are recommended under the following circumstances:
Copyright © 2008 - 2023 Health-Tourism.com, All Rights Reserved


text:
Shipping calculated at checkout.
Premium-Line extension socket 6-way black 3m H05VV-F 3G1.5
- Robust extension sockets, designed to be the best and made of break-resistant special plastic material.
- Elegant, sleek, timeless, high-quality design.
- Earthed sockets in a 45° arrangement, ideal for angular plugs.
- Illuminated 2-pole ON/OFF safety switch.
- With option to wind the cable around the rail for storage.
- With practical hanging facility.
- Innovative mounting concept.
- Sockets with increased touch protection.
- Cable length (m): 3 m
- Height: 6,50 cm
- Length: 43,00 cm
- Weight: 0,76 kg
- Width: 9,50 cm
- Housing colour: black
- Usage: Household
- Type of fastening: Mounting with screw, Mounting with cable tie
- Type of plug: Angle plug
- Number of socket outlets total: 6 St
- Socket outlet arrangement: 45°
- Degree of protection (IP): IP20


text:
A great exhibit comes with a handsome companion volume
By Janice Harayda
On, joy and rapture unforeseen! On Saturday I went to the Metropolitan Museum of Art to see the new show of bronze reliefs from the doors for the Baptistery of San Giovanni in Florence, created by Lorenzo Ghiberti over a 27-year period in the mid-15th century. And when I'm counting my cultural blessings for the year, I can stop right there with a profit.
The exhibit displays only 3 of the 10 bronze reliefs from the doors that depict Old Testament scenes, a jewel of the Renaissance. But the show is so rich — in beauty and interpretation — that it might change your view of one or two of the subjects of the reliefs: Adam and Eve, Jacob and Esau, and David and Goliath. Did you remember that David beheaded Goliath after he smote him with his slingshot? You're unlike to forget it if you view the panel about them. The New York Times's critic was right when she said in a recent review that this show almost makes you feel sorry for Goliath.
One of the remarkable aspects of the exhibit is that Ghiberti's craftsmanship is so precise, you can see the use of high, middle and low relief in the same panel — a technique I haven't seen shown as clearly anywhere else. You may be able to get a sense of this if you enlarge the book cover at right, which shows a detail from the Adam and Eve panel. At the bottom center you see God (looking like many artistic representations of Jesus) creating Eve from Adam's rib in middle relief. At the top center you see another image of God — in a hat, looking down on Creation — surrounded by angels in low relief. Another scene in the Adam and Eve panel, which you can't see, shows God in high relief.
I couldn't afford the handsome companion volume to the show that the Met was selling, The Gates of Paradise: Lorenzo Ghiberti's Renaissance Masterpiece/High Museum of Art Series (Yale University Press, 184 pp., $45) www.yale.edu/yup/, edited by Gary M. Radke, a professor of humanities at Syracuse University. But this is a book to check out at your local bookstore or an online retailer if your holiday gift list includes a lover of art, architecture, Italy or the Renaissance. Better still, go to the Met www.metmuseum.org and take a look at the book after you've seen the show, also called "The Gates of Paradise." You have until January 13.
(c) 2007 Janice Harayda. All rights reserved.


text:
Well, well, well, what an exciting surprise. While searching the newly released digitised copies of the Mt Gambier paper, the Border Watch, I discovered that in 1877, ggg grandfather James Bishop was nabbed for horse theft and remanded pending trial.
I suppose the find was more exciting than surprising. Why wasn't I surprised? Well, Jim was a drover and the article revealed he was also a dealer. Many horses would have passed through his hands, probably unbranded. Being a drover/stockman I would doubt bookkeeping was a strong suit and after reading many Pound Notices in the newspapers of the time, a lot of horses were wandering the countryside. Mix-ups could easily happen.
I was, however, very excited about this new discovery. Enough to tweet about it! To find some "dirt" is always exciting. Why is it we always get the most satisfaction from finding a record of an ancestor's misfortune? Criminal records, wills, and obituaries are favourites of mine, but don't forget inquests and asylum records. Obviously, some of the excitement is just because we have found something, anything, but it also makes the family member more interesting. These finds give them character. An extra dimension.
On the point of character, I would have assumed Jim was nothing but respectable. A Harman/Bishop marriage (that of my gg grandparents) took place in the same year as the arrest with another in the years following. With the Harmans being self-respecting church people, I am sure neither would have occurred if there were any doubts about Jim.
I had to find the outcome of the matter. I had thought of going to the Ballarat Archives Centre (PROV) where the Branxholme court registers are held (Series VPRS 4892 Court of Petty Sessions Registers). This however, would not shed much more light on the trial itself. Surely there was more than one newspaper report. Country newspapers reported on even the smallest of stories, and the fact James was remanded made it newsworthy. Now that I had the date of the court case, I could narrow a Trove search down. Believe me, this is a great help when searching a name like Bishop where a match to the Bishop of Ballarat is more likely than any members of my Bishop family.
I narrowed down a search of "Bishop Branxholme" to 1877 and bingo, the top two matches were about James. One, I had already found, but the other from the Portland Guardian reported on Jim's trial in November 1877 after his first court appearance. While I had searched the same paper for the Bishops, I had not found this article. The value of dates! Oh and some knowledge too. If I had found the article earlier I may have picked up it was one of my Bishops but I would have been unsure which one.
The barter system was alive and well in the Western District in the 1870s, with James trading a horse and £5 for a buggy. The question was where did the horse come from and was it one of Mr Officer's of Harton Hills Station
Upon questioning on this matter, Jim replied he did not know how he came to have the horse. Not a good start.
Evidence then moved to that of Constable Foster, who arrested Jim in a plain clothes operation. Who would have thought? Jim didn't. When asked by the plain-clothed Constable at Lower Byaduk, prior to his arrest, if he had sold mares at Branxholme lately, Jim said "…no, he had none to sell" but added that Mr. Madison had sold two colts for him at Branxholme. As two of the four missing horses were colts, Foster arrested Jim and sent him to the lockup.
While incarcerated, Jim had plenty of time to think over his recent conversations and must have realised he said the wrong thing to Foster and raised it with him. Jim told Foster he had thought he was "…one of Chalico's men come to look after some of my horses, and this is why I told you I sold no mares at Branxholme."
Then it became clear Jim was not a good bookkeeper, with him stating at the time of sale he did not get a receipt from Ted Lee the postman from whom he had bought the horse. Then Ted was hurt, so Jim went to Belfast (Port Fairy) to get a receipt from Ted, but he was too sick. Oh dear, things were not looking good.
At last, a savior. Witness Samuel Taylor took the stand. He had seen Jim and Ted Lee together with four horses. Ted told Samuel he had sold the horses to Jim. The horses were then agisted at Taylor's property for the next fortnight. Phew. Case dismissed, and Jim was off the hook.
So Jim didn't go to jail, but if it wasn't for Samuel Taylor's evidence, he may have. I hope he had Ted Lee lined up as a witness.
Now the excitement has subsided and I can continue to consider Jim Bishop an honest man. But deep down inside, a small part of me is crying…I could have searched prisoner records! Sorry, Jim!


text:
Do you recognize the image above? If the answer is yes, then you know I'm going to talk about Twitter. If you don't know what the bird represents, what a "tweet" is, or shudder when you hear people talk about "Twitter," "Facebook," or Social Media, then please stick around and keep reading. Perhaps I can alleviate your concerns!
The first thing everyone should know is that no matter how strict you set your privacy settings, you should act as if the whole world is reading. If you don't want your parents, children, co-workers, spouse, boss, friends, or the world knowing your deepest, darkest secret (that you would otherwise post for "strangers" to read) – then just don't post it. Things have a way of getting back to the people you are trying to hide something from (and yes, I just realized I ended a sentence with a preposition!) Second, if you don't want someone judging you due to your political, religious, ethical, or moral opinions – then what are you doing posting them? I guarantee that not everyone on your friends list has the same opinion/belief that you do – even if you think they do – they just hide it better! Third, due to all the changes that social media makes day in and day out, you will at one time encounter urban legends (ten gazillion likes will NOT help that poor child get a new heart/liver/kidney and unfortunately the child has probably died in the few years since the posting has been making the rounds); your closest friend may have clicked "like" on something (Facebook) and it has shown up on your newsfeed – unfortunately whatever they "liked" has offended you in some way – do not, I repeat Do Not believe that your closest friend has done this intentionally. Sure, they could have remembered rule #1 (see above) but things happen. Just either click the little x so you don't see similar things in your newsfeed, or just keep scrolling, or even contact your friend in person and explain that you were offended before you jump down their throat and decide that there is no way in the world they can ever be your friend again (what are you – 8 years old in elementary school?)
Now that we got that out of the way – there are those who post on Facebook all of the time but Twitter freaks them out. I guess it's the 140 or less thing – whatever you "tweet" on Twitter, it must be 140 characters or less. Trust me – it can be done! You may have to learn some "texting" or "tweeting" language, but it will become comfortable after awhile. I've been on twitter for awhile, tweeted sporadically up until about a month ago, and now I have made 180 tweets and have 33 followers – some are my friends/family and most are via geneablogging. Why, yes, I will probably tweet about this post when I'm done!
So how exactly does social media further genealogy research? Besides the networking angle, it can provide tips and tricks on better research strategies or even connecting distant cousins. Recently, the Southern California Genealogical Society Jamboree held in Burbank. The fact that I am not a member nor do I live anywhere in the vicinity of Burbank did not deter me from eavesdropping on the event. Unfortunately I didn't participate in any webinars, but I did keep up via Twitter. Below I've listed my favorite tweets (mainly because, these are hints that will help me!)
Tweets (or retweets) from Missy Corley:
- Schedule time every 6 mos or so to organize your bookmarks.
- When you're stuck, re-examine the records you already have.
- Unsubscribe from the email lists and newsletters you don't read.
- The CountyCheck feature in RMS is great!
Tweets (or retweets) from Amy Coffin:
- Some free map sites: NYPL, David Rumsey, LOC, Perry Castaneda at UTexas
- Don't forget Cyndi's List map page.
- Arons is now playing with HistoryPin.com, and so should you.
- Hovorka: new genealogists need seasoned genealogists too, for guidance, where to find info.
- Hovorka is saying the same thing Witcher did at RootsTech 11 about getting them in the door, not cramming citations down them.
- Hovorka: we need tools that foster mentoring and collaboration.
- Hovorka: scholarizing is a brick wall to reaching new genealogists. #scgs12 Yes, it is. Preach on, sister.
- Hmmm…mugshots.com, not your typical genealogy records set.
- If you're into frugal curating, @familycurator has a book coming out about it in a few months.
Tweets from Randy Seaver:
- Thomas talked quite a bit about affiliate programs on geneablogs Made up to $200 in one month
- Ancestry Insider says to write geneablogs for yourself. Ought to use images in every blog post.
- Thomas says Wikimedia Commons has copyright free images available for use on blogs.
Tweets (or retweets) from Elyse Doerflinger:
- Bubble.us is like a giant whiteboard and you can type anything down – get ideas out of your heard @drewsmithpa
- (Original tweet by Amy Crow) That's the key: "If I look at your citation, can I get back to the original?" – C Witcher (The comma doesn't matter!)
- (Original tweet by Tonia Kendrick) Be committed to ANAYLYZING your data. #Witcher
All of the tweets about Steve Luxenberg's presentation on "Secrets" by Susan A. Kitchens!
Tweets from Tonia Kendrick:
- NewsLibrary.com can be used a la carte – no subscription necessary. Contemporary content, not historical. @megansmolenyak
- Create timelines whenever you can. #Witcher
I kept all spelling/hashtags/capitalization the same however, most of these tweets included the hashtag for the conference which I did not include above.
Social media allows distant cousins – who would never be able to meet any other way – to get to know each other better and share valuable genealogical data and information. It also gives family historians the ability to learn from each other. So use it – but use it with care!
If you would like to read more about the folks above:
- Missy Corley is the author of Bayside Research Services and her blog is located at Bayside Blog. She has several posts about the Jamboree.
- Amy Coffin is the author of The We Tree Genealogy Blog.
- Randy Seaver writes Genea-Musings.
- Elyse Doerflinger's blog is Elyse's Genealogy Blog.
- Susan Kitchens writes about several things on Family Oral History.
- Tonia Kendrick is the author of Tonia's Roots. She has a post about the highlights from the Jamboree.
Personally, I want to thank all those who tweeted from the Jamboree as well as the presenters and the sponsor!


text:
Starting with AIX 7.1, CSM is no longer supported or available. It has been replaced by Distributed Systems Managment (DSM). Section 5.2 of the IBM AIX 7.1 Differences Guide Redbook provides details of the new DSM capabilities.
Fortunately DSM still provides access to the dsh command. Ive written about how Ive used this utility in the past. The new dsh command (and other tools) are provided in the new DSM filesets named dsm.core and dsm.dsh.
root@nim# lslpp -L dsm*
Fileset Level State Type Description (Uninstaller)
dsm.core 126.96.36.199 A F Distributed Systems Management
dsm.dsh 22.214.171.124 C F Distributed Systems Management
root@nim# lslpp -w /usr/bin/dsh
File Fileset Type
/usr/bin/dsh dsm.dsh Symlink
These filesets are NOT installed by default. You must manually install them. They can be found on your AIX 7.1 media.
If dsh is something you use, then I recommend you read the section on DSM in the Redbook. Also take a look at section 5.2.7 Using DSM and NIM, in which it describes how you can integrate DSM and NIM and completely automate the installation of AIX:
The AIX Network Installation Manager (NIM) has been enhanced to work with the Distributed System Management (DSM) commands. This integration enables the automatic installation of new AIX systems that are either currently powered on or off.
Although Ive written about the dsh command before, theres one usage Ive not covered. And that is using dsh to manage users across a group of LPARs. In particular, changing a users password.
Before I go any further, I should state that for the following to work you must first configure ssh keys on your NIM master (or central mgmt AIX system) so that you can communicate with all of your AIX systems via SSH, as root, without being prompted for a password. Read my article on dsh to find out how to do this if necessary.
In the following example, I use dsh from my NIM master. It is my central point of control for my AIX environment.
My ssh keys for root on my NIM master have been generated and distributed to all of my LPARs.
root@nim# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /.ssh/id_dsa.
Your public key has been saved in /.ssh/id_dsa.pub.
The key fingerprint is:
ed:18:e9:00:37:13:7c:7c:74:6a:a9:e0:ad:c0:09:a9 root@nim
The key's randomart image is:
| ... .. . |
| . ..o .+ |
| o . =. .+ |
| . o = = = |
|E + o S . |
| . + + |
| . o . |
| |
| |
root@nim# ls -ltra
total 40
-rw------- 1 root system 214 17 Sep 2010 authorized_keys
drwxr-xr-x 7 root system 4096 16 Nov 11:43 ..
-rw-r--r-- 1 root system 3615 16 Nov 12:04 known_hosts
-rw-r--r-- 1 root system 601 16 Nov 12:06 id_dsa.pub
-rw------- 1 root system 672 16 Nov 12:06 id_dsa
drwx------ 2 root system 256 16 Nov 12:06 .
On my AIX LPARs, the authorized_keys file has been updated with the public ssh key from my NIM master:
root@aixlpar1 [/.ssh]# chmod 600 known_hosts authorized_keys
root@aixlpar1 [/.ssh]# ls -ltr
total 0
-rw------- 1 root system 406 Sep 29 15:30 known_hosts
-rw------- 1 root system 601 Nov 16 12:07 authorized_keys
root@aixlpar1 [/.ssh]# cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPJpekVQgV2CTu5tCOsukwXwMrkfBabLAN7vwjgPk3S2p65COJkFwaDRWwBoK87cnMrrc7/GuOLdk/RiqYw1K8Z0d9RWnsymYrNm0MBALWioGGXwQ+YlLiYHIQsSArnajZOH6Ye36qz81uWNoj6u4xIxi/iGSYoU4x3UE/c/H833AAAAFQDKEtWVFk3G+KAyxUsI6FcpbJZqDQAAAIAVUVRak/s+X0mMElCaEs8Rh96GDfhorXWV1YzI0nbRo8QX2AMix+3LSdEmYCRn8TYpk1Udln3GG4gzy5oI/3Rd1RTWgAo+067LwytR6IJfwYt219Pwh2ktrm5iZu3c+yDBqQj6hsga2YIun5lxqYFy39CZNtslnR1wTx9uCcYkowAAAIEAuVFTsW9ugVM76CgluspNo0faz9xFo4DCOjCgye+k/ZqSDaNq6Xrvxktw+dkHuKHbhvofPgeiMrlqhdbrE0ovLUr8aadxArRhitnu10CFYbRwlrjAxyAaRwjD2pXG8M3a5D1XXAWDCDm6bEs5yxJqcl1wq+8UAhpKiS5yj2pwApk= root@nim
On the NIM master, the root user was configured for the DSH environment. The following entry was placed in roots .profile:
root@nim# cat /.profile
The following entry was placed in roots .kshrc file:
root@nim# cat /.kshrc
export DSH_NODE_RSH=/usr/bin/ssh
export DSH_NODE_LIST=/usr/local/etc/nodes
A /usr/local/etc/nodes file was created on the NIM master. This file contains a list of each of the nodes that dsh can communicate with from NIM:
root@nim# cat /usr/local/etc/nodes
The first time that the dsh command is run against a new host, the following message will be displayed. dsh uses the FQDN, and the FQDN needs to be added to the known_hosts file for ssh. Therefore you must make an ssh connection first with FQDN to the host:
root@nim# dsh uptime
aixlpar1.cg.com.au : Host key verification failed.
dsh: 2617-009 aixlpar1.cg.com.au remote shell had exit code 255
It is necessary to ssh directly to each node using its FQDN. This step is only required once for each node. For example:
root@nim# ssh aixlpar1.cg.com.au
The authenticity of host 'aixlpar1.cg.com.au (22.214.171.124)' can't be established.
RSA key fingerprint is 83:13:1d:cb:97:ee:00:7a:04:75:62:98:bd:e8:30:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'aixlpar1.cg.com.au ' (RSA) to the list of known hosts.
Last unsuccessful login: Tue Sep 27 03:04:33 GMT+10:00 2011 on ssh from 188.8.131.52
Last login: Wed Nov 16 12:08:08 GMT+11:00 2011 on /dev/pts/3 from nim
root@aixlpar1 [/root]# exit
Connection to aixlpar1.cg.com.au closed.
Now we can use the dsh command to run a command across all the nodes defined in the DSH_NODE_LIST. For example, the following command will run the uptime command on all nodes:
root@nim# dsh uptime
aixlpar1.cg.com.au : 12:14PM up 10 days, 22:32, 3 users, load average: 0.47, 0.53, 0.64
aixlpar2.cg.com.au : 12:14PM up 21 days, 21:13, 1 users, load average: 0.11, 0.31, 0.51
aixlpar3.cg.com.au : 12:14PM up 15 days, 20:33, 5 users, load average: 0.17, 0.43, 0.54
With dsh now configured, we can use it to perform several admin tasks from a central location. For example, the following commands will do the following:
1. Create a user, named cg, on all nodes.
2. Set cgs password to abc123 using the chpasswd command.
3. Remove the ADMCHG flag for the user cg. This will stop them from being prompted to change their password on their first login attempt.
First I check that user does not exist on the AIX systems.
root@nim# dsh lsuser cg
aixlpar1: 3004-687 User "cg" does not exist.
aixlpar2: 3004-687 User "cg" does not exist.
aixlpar3: 3004-687 User "cg" does not exist.
aixlpar4: 3004-687 User "cg" does not exist.
aixlpar5: 3004-687 User "cg" does not exist.
I create the user with the mkuser command.
root@nim# dsh mkuser cg
I confirm that the user has been created on all the AIX systems, with the lsuser command.
root@nim# dsh lsuser cg
aixlpar1: cg id=204 pgrp=staff groups=staff home=/home/cg shell=/usr/bin/ksh login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=files SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 roles=
aixlpar2: cg id=204 pgrp=staff groups=staff home=/home/cg shell=/usr/bin/ksh login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=files SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 roles=
aixlpar3: cg id=204 pgrp=staff groups=staff home=/home/cg shell=/usr/bin/ksh login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=files SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 roles=
I set the users password to abc123, using the chpasswd utility. I also remove the ADMCHG flag so that the user is not prompted to change their password on their first logon attempt.
root@nim# dsh 'echo cg:abc123 | chpasswd -c'
I confirm that I can logon with the new user with the specified password, on one of the AIX LPARs.
root@nim# ssh cg@aixlpar1
cg@aixlpar1s password:
Last login: Thu Mar 1 20:05:01 CST 2012 on /dev/pts/1 from aix71
$ id
uid=204(cg) gid=1(staff)
Another nice feature of dsh is the dshbak utility. This utility presents formatted output from the dsh command. For example:
root@nim 520 [/.ssh]# dsh errpt | dshbak
HOST: aixlpar1.cg.com.au
A6DF45AA 1104135011 I O RMCdaemon The daemon is started.
9DBCFDEE 1104134111 T O errdemon ERROR LOGGING TURNED ON
HOST: aixlpar2.cg.com.au
DE9A52D1 1111012611 I S rmt10 AAA1
4865FA9B 1111012211 P H rmt10 TAPE OPERATION ERROR
DE9A52D1 1110233511 I S rmt0 AAA1
4865FA9B 1110225511 P H rmt0 TAPE OPERATION ERROR
DE9A52D1 1109180311 I S rmt0 AAA1
4865FA9B 1109180011 P H rmt0 TAPE OPERATION ERROR
DE9A52D1 1108180411 I S rmt2 AAA1
4865FA9B 1108180211 P H rmt2 TAPE OPERATION ERROR
DE9A52D1 1108165711 I S rmt6 AAA1
4865FA9B 1108165111 P H rmt6 TAPE OPERATION ERROR
A2205861 1102085311 P S SYSPROC Excessive interrupt disablement time
DE9A52D1 1030163411 I S rmt0 AAA1
4865FA9B 1030163411 P H rmt0 TAPE OPERATION ERROR
WARNING: Please be VERY CAREFUL when using the dsh command. Issuing the wrong command can cause damage to all your AIX LPARS!
The dsm.dsh package contains the following utilities:
# lslpp -f dsm.dsh | grep /usr/bin
/usr/bin/dcp -> /opt/ibm/sysmgt/dsm/bin/dcp
/usr/bin/dsh -> /opt/ibm/sysmgt/dsm/bin/dsh
/usr/bin/dping -> /opt/ibm/sysmgt/dsm/bin/dping
/usr/bin/dshbak -> /opt/ibm/sysmgt/dsm/bin/dshbak
If you are a fan of the dping command, you are going to be disappointed. Although the command is currently included in the dsm.dsh fileset, it probably wont be for much longer.
The command works, sort of:
root@nim# dping aixlpar1
aixlpar1: ping (alive)
But if you run dping a:
root@nim# dping -a
dping: 2651-095 CSM license has expired or has not been accepted. Run csmconfig -L if you have installed a new release.
According to
the developers, dping is no longer
supported and will eventually be removed from the DSM package. The response
from the developers was as follows:
"The reason "dping -a" is failing with the license check is because the command is calling /usr/bin/runact-api c IBM.DmsCtrl::::isLicenseValid" and the license is not set. So the command fails. Since CSM is not supported anymore and went end of life. "
... please consider the dping command as being "deprecated" code pending removal from the dsm.dsh package.
When I asked whythe command was listed in the AIX 7.1 online documentation if it was no longer available, I was informed: We are in the process of working with component owner regarding the DOCs and updating them.. At this stage Ive not been able to find an alternative command (in AIX). If I find one, Ill update this post.
If you are planning on migrating to AIX 7.1 please be aware that CSM is no longer supported or available with AIX 7.1. CSM is now end of life.


text:
About Beats by dr. dre
Do you know Headphones Beats By Dr.Dre Studio? You may want to have your own. If you try the Monster Beats, let me introduce it for you. Beats By Dre simple to realize the design of this headset allows users to carry and store the headphones where they are. Beats By Dre Headphones that can be folded into three parts and stored in any container including package and bag. The headset comes with the ability to appear in the most unique designs that the monster beats studio is harder and tougher than other sets of headphones beats solo hd.
Monster Beats has managed to combine style with functionality in the Dr Dre range of Earphone. Not only do they all look very good, but the sound quality is extremely beautiful. Sounds are well balanced throughout, with comfortable middle voice and thumping bass. You can get the feeling of fantastic high definition when using headphones beats to listen to beautiful music, you'll find cheap Beats By Dre just the right set for you here. And if you have any comments or questions, please do not be hesitated to contact us.


text:
Local Index Issue With Partitioned PK and Unique Key Constraints December 20, 2007Posted by Richard Foote in Constraints, Index Access Path, Local Indexes, Oracle Indexes, Partitioning, Performance Tuning, Unique Indexes.
Nuno Souto (Noons) also asked a really interesting question on my Differences between Unique and Non-Unique Indexes blog entry (comment 4) that I thought it worthy of a separate blog entry to do the answer justice. The question was:
"Isn't it still the case that unique indexes cannot be locally partitioned unless the partition key is part of the index key? Not sure if 11g removes this. If still so, that would weigh heavily in favour of non-unique indexing for PK on a table potentially requiring local index partitions."
Simplistically, the answer to the first part is Yes it is still the case, even in 11g and the answer to the second part is No, it wouldn't weigh heavily in favour of non-unique indexing for PK on a table requiring local index partitions. It wouldn't actually be a consideration at all.
Let me explain why.
Firstly, there is a really really good reason why Oracle doesn't allow us to create a Unique Index in which the Partition key is not part of a Local Index. It's called protecting us from ourselves !!
Let's start by mentioning constraints again.
Remember, the main reason we have indexes policing PK and Unique constraints is so that Oracle can very quickly and efficiently determine whether or not a new value already exists. Do a quick index look-up, is the value there, yes or no, allow the insert (or update), yes or no.
Just imagine for one moment what would happen if Oracle actually allowed us to create a Unique Local index in which the index didn't include the partitioned column(s).
Lets say a table is Range Partitioned on column 'A' and we try and create a Unique Local index on just column 'B'. Let's assume we have (say) 500 table partitions meaning we must therefore have 500 local index partitions as well. When we insert a new value for our unique index for value B, it will attempt to do so in the corresponding local index partition as governed by the value A for the new row. However Oracle can't just check this one index partition for uniqueness to ensure value of column B doesn't already exist, Oracle would need to check all 500 index partitions because it would be possible for our new value of column B to potentially have previously been inserted into any of the other 499 partitions !!
Each and every insert into our partitioned table (partitioned by column A) therefore would require Oracle to check all (say)500 index partitions each and every time to check for duplicates of column B. Again, it's important to understand that any given value of column B could potentially be in any of the 500 partitions, IF Oracle allowed us to create a Local Partitioned Index just on column B.
Checking all 500 index partitions looking for a specific value of column B would obviously be impractical, inefficient and totally un-scalable. Therefore Oracle doesn't allow us to do this. It doesn't allow us to create a Local index in which the indexed columns does't include the partitioning columns as well.
This is actually a good thing.
If you want to create a Unique index in a partitioned table, you MUST either add all the partitioned columns and make it part of the LOCAL unique index (so that way each and every insert would only have to check the one local partition as this value is known now it's part of the index) or you must create it as a GLOBAL index (in which again, Oracle only has to check the one index structure).
It actually makes a lot of sense to do this.
Moving onto the second part of the question. Let's just use a Local Non-Unique index to police our PK constraints then.
Fortunately this isn't allowed either for exactly the same reasons. You can't create a Local Non-unique index to police a PK (or Unique) constraint if the Constraint does not also include the partitioned columns. Otherwise again, Oracle would need to check each and every index partition to determine whether the constraint has been violated or not.
If you attempt to use an existing Local Non-Unique index to police a PK or Unique constraint that does not contain the partitioned columns, you will get an error saying it can't create the (by default Global index) because the useless Local Non-Unique index (from a policing the constraint point of view) already exists.
Again if you want to create a Non-Unique index to police a PK or Unique constraint you must either ensure the constraint includes all the partitioned columns in which case it can be Local or you must use a Global Non-Unique index.
In other words, the rules apply equally to both Unique and Non-Unique indexes.
So it's not really a case of Oracle not allowing one to create a Local Unique index without including the partitioned columns (although that's of course true) but really a case of Oracle not allowing a PK or Unique *constraint* to be policed via *any* Local index (whether Unique or Non-Unique), unless the partitioned columns are also included.
Little demo to illustrate: Local Index Issue With Partitioned PK and Unique Key Constraints
- 1. Martin W - December 21, 2007
That's a nice sum-up of the difficulties with primary keys and partitions.
I thought I'd comment that this issue with local partition indexing is also relevent for non-unique indexes, as I found to my cost.
"Checking all 500 index partitions looking for a specific value of column B would obviously be impractical, inefficient and totally un-scalable. Therefore Oracle doesn't allow us to do this. It doesn't allow us to create a Local index in which the indexed columns does't include the partitioning columns as well"
This has caught me out with non-unique indexes on a partitioned table as well and highlights the fact that partitioning is often not good for general performance – unless most DML acces can use parition exclusion.
We had a table with initially 10 partitions, partitioned on a surrogate ID, 10M records in each partition. We also had a NAME column, with a non-unique, locally partitioned index. Everything was fine.
When we hit around 80 partitions I noticed the NAME lookup was slowing down. This is because Oracle was now having to check 100 index partitions, resulting in around 400 block reads with around 30% being physical if I rememeber correctly.
It was still fine for single look-ups but code that worked on thousands of records, based on NAME lookup, started to really suffer.
If I had bothered to Explain the name look up in the first place, rather than being simply happy that my reponse time was initially fine, I might have spotted the potential non-scalability before the table got so big that rebuilding the index as global (the answer) became a major undertaking.
- 3. Explanation of restriction of local indexes for unique keys on partitioned tables « Oracle Notes - November 24, 2010
[…] You can find the article here. […]
- 4. Microsoft – SQLServer – Partitioning – Index – Unique | Daniel Adeniji's Trail - January 20, 2011
[…] Local Index Issue With Partitioned PK and Unique Key Constraintshttps://richardfoote.wordpress.com/2007/12/20/local-index-issue-with-partitioned-pk-and-unique-key-co… […]
- 5. VMCD.ORG » Blog Archive » [转]Local Index Issue With Partitioned PK and Unique Key Constraints - December 27, 2011
- 6. Ragesh Hajela - August 15, 2013
Nice sum-up. But how is the performance of a non-unique local index on a non-unique field of a table?
- 8. Alinda - September 13, 2013
Hi Richard,
Very good post, I like it very much.
But I can't access the demo.
Could you give me an access?
Thanks a lot
- 9. Alinda - September 13, 2013
…and I can see a very good demo (same as usual), I love your demos…..
Thx for your quick response
- 10. Johannes - August 3, 2018
Great explanation