Scrooge listened to this dialogue in horror. As they sat grouped about their spoil, in the scanty light afforded by the old man’s lamp, he viewed them with a detestation and disgust, which could hardly have been greater, though they had been obscene demons, marketing the corpse itself.
“Ha, ha!” laughed the same woman, when old Joe, producing a flannel bag with money in it, told out their several gains upon the ground. “This is the end of it, you see! He frightened every one away from him when he was alive, to profit us when he was dead! Ha, ha, ha!”
“Spirit!” said Scrooge, shuddering from head to foot. “I see, I see. The case of this unhappy man might be my own. My life tends that way, now. Merciful Heaven, what is this!”
He recoiled in terror, for the scene had changed, and now he almost touched a bed: a bare, uncurtained bed: on which, beneath a ragged sheet, there lay a something covered up, which, though it was dumb, announced itself in awful language.
The room was very dark, too dark to be observed with any accuracy, though Scrooge glanced round it in obedience to a secret impulse, anxious to know what kind of room it was. A pale light, rising in the outer air, fell straight upon the bed; and on it, plundered and bereft, unwatched, unwept, uncared for, was the body of this man.
Scrooge glanced towards the Phantom. Its steady hand was pointed to the head. The cover was so carelessly adjusted that the slightest raising of it, the motion of a finger upon Scrooge’s part, would have disclosed the face. He thought of it, felt how easy it would be to do, and longed to do it; but had no more power to withdraw the veil than to dismiss the spectre at his side.
Oh cold, cold, rigid, dreadful Death, set up thine altar here, and dress it with such terrors as thou hast at thy command: for this is thy dominion! But of the loved, revered, and honoured head, thou canst not turn one hair to thy dread purposes, or make one feature odious. It is not that the hand is heavy and will fall down when released; it is not that the heart and pulse are still; but that the hand was open, generous, and true; the heart brave, warm, and tender; and the pulse a man’s. Strike, Shadow, strike! And see his good deeds springing from the wound, to sow the world with life immortal!
No voice pronounced these words in Scrooge’s ears, and yet he heard them when he looked upon the bed. He thought, if this man could be raised up now, what would be his foremost thoughts? Avarice, hard-dealing, griping cares? They have brought him to a rich end, truly!
He lay, in the dark empty house, with not a man, a woman, or a child, to say that he was kind to me in this or that, and for the memory of one kind word I will be kind to him. A cat was tearing at the door, and there was a sound of gnawing rats beneath the hearth-stone. What they wanted in the room of death, and why they were so restless and disturbed, Scrooge did not dare to think.
“Spirit!” he said, “this is a fearful place. In leaving it, I shall not leave its lesson, trust me. Let us go!”
Still the Ghost pointed with an unmoved finger to the head.
“I understand you,” Scrooge returned, “and I would do it, if I could. But I have not the power, Spirit. I have not the power.”
Again it seemed to look upon him.
“If there is any person in the town, who feels emotion caused by this man’s death,” said Scrooge quite agonised, “show that person to me, Spirit, I beseech you!”
The Phantom spread its dark robe before him for a moment, like a wing; and withdrawing it, revealed a room by daylight, where a mother and her children were.
She was expecting some one, and with anxious eagerness; for she walked up and down the room; started at every sound; looked out from the window; glanced at the clock; tried, but in vain, to work with her needle; and could hardly bear the voices of the children in their play.
At length the long-expected knock was heard. She hurried to the door, and met her husband; a man whose face was careworn and depressed, though he was young. There was a remarkable expression in it now; a kind of serious delight of which he felt ashamed, and which he struggled to repress.
He sat down to the dinner that had been hoarding for him by the fire; and when she asked him faintly what news (which was not until after a long silence), he appeared embarrassed how to answer.
“Is it good?” she said, “or bad?”—to help him.
“Bad,” he answered.
“We are quite ruined?”
“No. There is hope yet, Caroline.”
“If he relents,” she said, amazed, “there is! Nothing is past hope, if such a miracle has happened.”
“He is past relenting,” said her husband. “He is dead.”
She was a mild and patient creature if her face spoke truth; but she was thankful in her soul to hear it, and she said so, with clasped hands. She prayed forgiveness the next moment, and was sorry; but the first was the emotion of her heart.
“What the half-drunken woman whom I told you of last night, said to me, when I tried to see him and obtain a week’s delay; and what I thought was a mere excuse to avoid me; turns out to have been quite true. He was not only very ill, but dying, then.”
“To whom will our debt be transferred?”
“I don’t know. But before that time we shall be ready with the money; and even though we were not, it would be a bad fortune indeed to find so merciless a creditor in his successor. We may sleep to-night with light hearts, Caroline!”
Yes. Soften it as they would, their hearts were lighter. The children’s faces, hushed and clustered round to hear what they so little understood, were brighter; and it was a happier house for this man’s death! The only emotion that the Ghost could show him, caused by the event, was one of pleasure.
“Let me see some tenderness connected with a death,” said Scrooge; “or that dark chamber, Spirit, which we left just now, will be for ever present to me.”
The Ghost conducted him through several streets familiar to his feet; and as they went along, Scrooge looked here and there to find himself, but nowhere was he to be seen. They entered poor Bob Cratchit’s house; the dwelling he had visited before; and found the mother and the children seated round the fire.
Quiet. Very quiet. The noisy little Cratchits were as still as statues in one corner, and sat looking up at Peter, who had a book before him. The mother and her daughters were engaged in sewing. But surely they were very quiet!
“ ‘And He took a child, and set him in the midst of them.’ ”
Where had Scrooge heard those words? He had not dreamed them. The boy must have read them out, as he and the Spirit crossed the threshold. Why did he not go on?

“The colour hurts my eyes,” she said.
The colour? Ah, poor Tiny Tim!
“They’re better now again,” said Cratchit’s wife. “It makes them weak by candle-light; and I wouldn’t show weak eyes to your father when he comes home, for the world. It must be near his time.”
“Past it rather,” Peter answered, shutting up his book. “But I think he has walked a little slower than he used, these few last evenings, mother.”
They were very quiet again. At last she said, and in a steady, cheerful voice, that only faltered once:
“I have known him walk with—I have known him walk with Tiny Tim upon his shoulder, very fast indeed.”
“And so have I,” cried Peter. “Often.”
“And so have I,” exclaimed another. So had all.
“But he was very light to carry,” she resumed, intent upon her work, “and his father loved him so, that it was no trouble: no trouble. And there is your father at the door!”
She hurried out to meet him; and little Bob in his comforter—he had need of it, poor fellow—came in. His tea was ready for him on the hob, and they all tried who should help him to it most. Then the two young Cratchits got upon his knees and laid, each child a little cheek, against his face, as if they said, “Don’t mind it, father. Don’t be grieved!”
Bob was very cheerful with them, and spoke pleasantly to all the family. He looked at the work upon the table, and praised the industry and speed of Mrs. Cratchit and the girls. They would be done long before Sunday, he said.
“Sunday! You went to-day, then, Robert?” said his wife.
“Yes, my dear,” returned Bob. “I wish you could have gone. It would have done you good to see how green a place it is. But you’ll see it often. I promised him that I would walk there on a Sunday. My little, little child!” cried Bob. “My little child!”
He broke down all at once. He couldn’t help it. If he could have helped it, he and his child would have been farther apart perhaps than they were.
He left the room, and went up-stairs into the room above, which was lighted cheerfully, and hung with Christmas. There was a chair set close beside the child, and there were signs of some one having been there, lately. Poor Bob sat down in it, and when he had thought a little and composed himself, he kissed the little face. He was reconciled to what had happened, and went down again quite happy.
They drew about the fire, and talked; the girls and mother working still. Bob told them of the extraordinary kindness of Mr. Scrooge’s nephew, whom he had scarcely seen but once, and who, meeting him in the street that day, and seeing that he looked a little—“just a little down you know,” said Bob, inquired what had happened to distress him. “On which,” said Bob, “for he is the pleasantest-spoken gentleman you ever heard, I told him. ‘I am heartily sorry for it, Mr. Cratchit,’ he said, ‘and heartily sorry for your good wife.’ By the bye, how he ever knew that, I don’t know.”
“Knew what, my dear?”
“Why, that you were a good wife,” replied Bob.
“Everybody knows that!” said Peter.
“Very well observed, my boy!” cried Bob. “I hope they do. ‘Heartily sorry,’ he said, ‘for your good wife. If I can be of service to you in any way,’ he said, giving me his card, ‘that’s where I live. Pray come to me.’ Now, it wasn’t,” cried Bob, “for the sake of anything he might be able to do for us, so much as for his kind way, that this was quite delightful. It really seemed as if he had known our Tiny Tim, and felt with us.”
“I’m sure he’s a good soul!” said Mrs. Cratchit.
“You would be surer of it, my dear,” returned Bob, “if you saw and spoke to him. I shouldn’t be at all surprised—mark what I say!—if he got Peter a better situation.”
“Only hear that, Peter,” said Mrs. Cratchit.
“And then,” cried one of the girls, “Peter will be keeping company with some one, and setting up for himself.”
“Get along with you!” retorted Peter, grinning.
“It’s just as likely as not,” said Bob, “one of these days; though there’s plenty of time for that, my dear. But however and whenever we part from one another, I am sure we shall none of us forget poor Tiny Tim—shall we—or this first parting that there was among us?”
“Never, father!” cried they all.
“And I know,” said Bob, “I know, my dears, that when we recollect how patient and how mild he was; although he was a little, little child; we shall not quarrel easily among ourselves, and forget poor Tiny Tim in doing it.”
“No, never, father!” they all cried again.
“I am very happy,” said little Bob, “I am very happy!”
Mrs. Cratchit kissed him, his daughters kissed him, the two young Cratchits kissed him, and Peter and himself shook hands. Spirit of Tiny Tim, thy childish essence was from God!
“Spectre,” said Scrooge, “something informs me that our parting moment is at hand. I know it, but I know not how. Tell me what man that was whom we saw lying dead?”
The Ghost of Christmas Yet To Come conveyed him, as before—though at a different time, he thought: indeed, there seemed no order in these latter visions, save that they were in the Future—into the resorts of business men, but showed him not himself. Indeed, the Spirit did not stay for anything, but went straight on, as to the end just now desired, until besought by Scrooge to tarry for a moment.
“This court,” said Scrooge, “through which we hurry now, is where my place of occupation is, and has been for a length of time. I see the house. Let me behold what I shall be, in days to come!”
The Spirit stopped; the hand was pointed elsewhere.
“The house is yonder,” Scrooge exclaimed. “Why do you point away?”
The inexorable finger underwent no change.
Scrooge hastened to the window of his office, and looked in. It was an office still, but not his. The furniture was not the same, and the figure in the chair was not himself. The Phantom pointed as before.
He joined it once again, and wondering why and whither he had gone, accompanied it until they reached an iron gate. He paused to look round before entering.
A churchyard. Here, then; the wretched man whose name he had now to learn, lay underneath the ground. It was a worthy place. Walled in by houses; overrun by grass and weeds, the growth of vegetation’s death, not life; choked up with too much burying; fat with repleted appetite. A worthy place!
The Spirit stood among the graves, and pointed down to One. He advanced towards it trembling. The Phantom was exactly as it had been, but he dreaded that he saw new meaning in its solemn shape.
“Before I draw nearer to that stone to which you point,” said Scrooge, “answer me one question. Are these the shadows of the things that Will be, or are they shadows of things that May be, only?”
Still the Ghost pointed downward to the grave by which it stood.
“Men’s courses will foreshadow certain ends, to which, if persevered in, they must lead,” said Scrooge. “But if the courses be departed from, the ends will change. Say it is thus with what you show me!”
The Spirit was immovable as ever.
Scrooge crept towards it, trembling as he went; and following the finger, read upon the stone of the neglected grave his own name, Ebenezer Scrooge.
“Am I that man who lay upon the bed?” he cried, upon his knees.
The finger pointed from the grave to him, and back again.
“No, Spirit! Oh no, no!”
The finger still was there.
“Spirit!” he cried, tight clutching at its robe, “hear me! I am not the man I was. I will not be the man I must have been but for this intercourse. Why show me this, if I am past all hope!”
For the first time the hand appeared to shake.
“Good Spirit,” he pursued, as down upon the ground he fell before it: “Your nature intercedes for me, and pities me. Assure me that I yet may change these shadows you have shown me, by an altered life!”
The kind hand trembled.
“I will honour Christmas in my heart, and try to keep it all the year. I will live in the Past, the Present, and the Future. The Spirits of all Three shall strive within me.  Oh, tell me I may sponge away the writing on this stone!”
In his agony, he caught the spectral hand. It sought to free itself, but he was strong in his entreaty, and detained it. The Spirit, stronger yet, repulsed him.
Holding up his hands in a last prayer to have his fate reversed, he saw
an alteration in the Phantom’s hood and dress. It shrunk,
collapsed, and dwindled down into a bedpost.
Yes! and the bedpost was his own. The bed was his own, the room was his own. Best and happiest of all, the Time before him was his own, to make amends in!
“I will live in the Past, the Present, and the Future!” Scrooge repeated, as he scrambled out of bed. “The Spirits of all Three shall strive within me. Oh Jacob Marley! Heaven, and the Christmas Time be praised for this! I say it on my knees, old Jacob; on my knees!”
He was so fluttered and so glowing with his good intentions, that his broken voice would scarcely answer to his call. He had been sobbing violently in his conflict with the Spirit, and his face was wet with tears.
“They are not torn down,” cried Scrooge, folding one of his bed-curtains in his arms, “they are not torn down, rings and all. They are here—I am here—the shadows of the things that would have been, may be dispelled. They will be. I know they will!”
His hands were busy with his garments all this time; turning them inside out, putting them on upside down, tearing them, mislaying them, making them parties to every kind of extravagance.
“I don’t know what to do!” cried Scrooge, laughing and crying in the same breath; and making a perfect Laocoön of himself with his stockings. “I am as light as a feather, I am as happy as an angel, I am as merry as a schoolboy. I am as giddy as a drunken man. A merry Christmas to everybody! A happy New Year to all the world. Hallo here! Whoop! Hallo!”
He had frisked into the sitting-room, and was now standing there: perfectly winded.
“There’s the saucepan that the gruel was in!” cried Scrooge, starting off again, and going round the fireplace. “There’s the door, by which the Ghost of Jacob Marley entered! There’s the corner where the Ghost of Christmas Present, sat! There’s the window where I saw the wandering Spirits! It’s all right, it’s all true, it all happened. Ha ha ha!”
Really, for a man who had been out of practice for so many years, it was a splendid laugh, a most illustrious laugh. The father of a long, long line of brilliant laughs!
“I don’t know what day of the month it is!” said Scrooge. “I don’t know how long I’ve been among the Spirits. I don’t know anything. I’m quite a baby. Never mind. I don’t care. I’d rather be a baby. Hallo! Whoop! Hallo here!”
He was checked in his transports by the churches ringing out the lustiest peals he had ever heard. Clash, clang, hammer; ding, dong, bell. Bell, dong, ding; hammer, clang, clash! Oh, glorious, glorious!
Running to the window, he opened it, and put out his head. No fog, no mist; clear, bright, jovial, stirring, cold; cold, piping for the blood to dance to; Golden sunlight; Heavenly sky; sweet fresh air; merry bells. Oh, glorious! Glorious!
“What’s to-day!” cried Scrooge, calling downward to a boy in Sunday clothes, who perhaps had loitered in to look about him.
“Eh?” returned the boy, with all his might of wonder.
“What’s to-day, my fine fellow?” said Scrooge.
“To-day!” replied the boy. “Why, Christmas Day.”
“It’s Christmas Day!” said Scrooge to himself. “I haven’t missed it. The Spirits have done it all in one night. They can do anything they like. Of course they can. Of course they can. Hallo, my fine fellow!”
“Hallo!” returned the boy.
“Do you know the Poulterer’s, in the next street but one, at the corner?” Scrooge inquired.
“I should hope I did,” replied the lad.
“An intelligent boy!” said Scrooge. “A remarkable boy!
“What a delightful boy!” said Scrooge. “It’s a pleasure to talk to him. Yes, my buck!”
“It’s hanging there now,” replied the boy.
“Is it?” said Scrooge. “Go and buy it.”
“Walk-er!” exclaimed the boy.
“No, no,” said Scrooge, “I am in earnest. Go and buy it, and tell ’em to bring it here, that I may give them the direction where to take it. Come back with the man, and I’ll give you a shilling. Come back with him in less than five minutes and I’ll give you half-a-crown!”
The boy was off like a shot. He must have had a steady hand at a trigger who could have got a shot off half so fast.
“I’ll send it to Bob Cratchit’s!” whispered Scrooge, rubbing his hands, and splitting with a laugh. “He sha’n’t know who sends it. It’s twice the size of Tiny Tim. Joe Miller never made such a joke as sending it to Bob’s will be!”
The hand in which he wrote the address was not a steady one, but write it he did, somehow, and went down-stairs to open the street door, ready for the coming of the poulterer’s man. As he stood there, waiting his arrival, the knocker caught his eye.
“I shall love it, as long as I live!” cried Scrooge, patting it with his hand. “I scarcely ever looked at it before. What an honest expression it has in its face! It’s a wonderful knocker!—Here’s the Turkey! Hallo! Whoop! How are you! Merry Christmas!”
It was a Turkey! He never could have stood upon his legs, that bird. He would have snapped ’em short off in a minute, like sticks of sealing-wax.
“Why, it’s impossible to carry that to Camden Town,” said Scrooge. “You must have a cab.”
The chuckle with which he said this, and the chuckle with which he paid for the Turkey, and the chuckle with which he paid for the cab, and the chuckle with which he recompensed the boy, were only to be exceeded by the chuckle with which he sat down breathless in his chair again, and chuckled till he cried.
Shaving was not an easy task, for his hand continued to shake very much; and shaving requires attention, even when you don’t dance while you are at it.
He dressed himself “all in his best,” and at last got out into the streets. The people were by this time pouring forth, as he had seen them with the Ghost of Christmas Present; and walking with his hands behind him, Scrooge regarded every one with a delighted smile. He looked so irresistibly pleasant, in a word, that three or four good-humoured fellows said, “Good morning, sir! A merry Christmas to you!” And Scrooge said often afterwards, that of all the blithe sounds he had ever heard, those were the blithest in his ears.
He had not gone far, when coming on towards him he beheld the portly gentleman, who had walked into his counting-house the day before, and said, “Scrooge and Marley’s, I believe?” It sent a pang across his heart to think how this old gentleman would look upon him when they met; but he knew what path lay straight before him, and he took it.
“My dear sir,” said Scrooge, quickening his pace, and taking the old gentleman by both his hands. “How do you do? I hope you succeeded yesterday. It was very kind of you. A merry Christmas to you, sir!”
“Mr. Scrooge?”
“Yes,” said Scrooge. “That is my name, and I fear it may not be pleasant to you. Allow me to ask your pardon. And will you have the goodness”—here Scrooge whispered in his ear.
“Lord bless me!” cried the gentleman, as if his breath were taken away. “My dear Mr. Scrooge, are you serious?”
“If you please,” said Scrooge. “Not a farthing less. A great many back-payments are included in it, I assure you. Will you do me that favour?”
“My dear sir,” said the other, shaking hands with him. “I don’t know what to say to such munifi—”
“Don’t say anything, please,” retorted Scrooge. “Come and see me. Will you come and see me?”
“I will!” cried the old gentleman. And it was clear he meant to do it.
“Thank’ee,” said Scrooge. “I am much obliged to you. I thank you fifty times. Bless you!”
He went to church, and walked about the streets, and watched the people hurrying to and fro, and patted children on the head, and questioned beggars, and looked down into the kitchens of houses, and up to the windows, and found that everything could yield him pleasure. He had never dreamed that any walk—that anything—could give him so much happiness. In the afternoon he turned his steps towards his nephew’s house.
He passed the door a dozen times, before he had the courage to go up and knock. But he made a dash, and did it:
“Is your master at home, my dear?” said Scrooge to the girl. Nice girl! Very.
“Yes, sir.”
“Where is he, my love?” said Scrooge.
“He’s in the dining-room, sir, along with mistress. I’ll show you up-stairs, if you please.”
“Thank’ee. He knows me,” said Scrooge, with his hand already on the dining-room lock. “I’ll go in here, my dear.”
He turned it gently, and sidled his face in, round the door. They were looking at the table (which was spread out in great array); for these young housekeepers are always nervous on such points, and like to see that everything is right.
“Fred!” said Scrooge.
Dear heart alive, how his niece by marriage started! Scrooge had forgotten, for the moment, about her sitting in the corner with the footstool, or he wouldn’t have done it, on any account.
“Why bless my soul!” cried Fred, “who’s that?”
“It’s I. Your uncle Scrooge. I have come to dinner. Will you let me in, Fred?”
Let him in!  He was at home in five minutes. Nothing could be heartier. His niece looked just the same. So did Topper when he came. So did the plump sister when she came. So did every one when they came. Wonderful party, wonderful games, wonderful unanimity, won-der-ful happiness!
But he was early at the office next morning. Oh, he was early there. If he could only be there first, and catch Bob Cratchit coming late! That was the thing he had set his heart upon.
And he did it; yes, he did! The clock struck nine. No Bob. A quarter past. No Bob. He was full eighteen minutes and a half behind his time. Scrooge sat with his door wide open, that he might see him come into the Tank.
His hat was off, before he opened the door; his comforter too. He was on his stool in a jiffy; driving away with his pen, as if he were trying to overtake nine o’clock.
“Hallo!” growled Scrooge, in his accustomed voice, as near as he could feign it. “What do you mean by coming here at this time of day?”
“I am very sorry, sir,” said Bob. “I am behind my time.”
“You are?” repeated Scrooge. “Yes. I think you are. Step this way, sir, if you please.”
“It’s only once a year, sir,” pleaded Bob, appearing from the Tank. “It shall not be repeated. I was making rather merry yesterday, sir.”
“Now, I’ll tell you what, my friend,” said Scrooge, “I am not going to stand this sort of thing any longer. And therefore,” he continued, leaping from his stool, and giving Bob such a dig in the waistcoat that he staggered back into the Tank again; “and therefore I am about to raise your salary!”
Bob trembled, and got a little nearer to the ruler. He had a momentary idea of knocking Scrooge down with it, holding him, and calling to the people in the court for help and a strait-waistcoat.
“A merry Christmas, Bob!” said Scrooge, with an earnestness that could not be mistaken, as he clapped him on the back. “A merrier Christmas, Bob, my good fellow, than I have given you, for many a year! I’ll raise your salary, and endeavour to assist your struggling family, and we will discuss your affairs this very afternoon, over a Christmas bowl of smoking bishop, Bob! Make up the fires, and buy another coal-scuttle before you dot another i, Bob Cratchit!”
Scrooge was better than his word. He did it all, and infinitely more; and to Tiny Tim, who did not die, he was a second father. He became as good a friend, as good a master, and as good a man, as the good old city knew, or any other good old city, town, or borough, in the good old world. Some people laughed to see the alteration in him, but he let them laugh, and little heeded them; for he was wise enough to know that nothing ever happened on this globe, for good, at which some people did not have their fill of laughter in the outset; and knowing that such as these would be blind anyway, he thought it quite as well that they should wrinkle up their eyes in grins, as have the malady in less attractive forms. His own heart laughed: and that was quite enough for him.
He had no further intercourse with Spirits, but lived upon the Total
Abstinence Principle, ever afterwards; and it was always said of him,
that he knew how to keep Christmas well, if any man alive possessed the
knowledge. May that be truly said of us, and all of us! And so, as Tiny
Tim observed, God bless Us, Every One!
End of the Project Gutenberg EBook of A Christmas Carol, by Charles Dickens *** END OF THIS PROJECT GUTENBERG EBOOK A CHRISTMAS CAROL *** ***** This file should be named 46-h.htm or 46-h.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.net/4/46/ HTML formatting and additional editing by Jose Menendez. Many thanks to David Widger for scanning the illustrations from his copy of the 1843 first edition. Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.net/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.net), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees.   LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116,<PHONE_NUMBER>, email<EMAIL_ADDRESS>Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director<EMAIL_ADDRESS>Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.net This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks.


--- layout: post title: “I’ve owned certain pieces of clothing for 25 or 30 years and I’ve also gotten rid of things after a week. I think a wardrobe is much like a garden. It needs constant tending.” Nick Wooster, via Racked date: '2011-05-31T17:16:14+02:00' tags: - style tumblr_url: http://dotmr.tumblr.com/post/6047428687/ive-owned-certain-pieces-of-clothing-for-25-or ---
“I’ve owned certain pieces of clothing for 25 or 30 years and I’ve also gotten rid of things after a week. I think a wardrobe is much like a garden. It needs constant tending.” Nick Wooster, via Racked—Well Dressed Man • everlane: “I’ve owned certain pieces of…


This example shows that by using valdrMessage it is possible to register validation messages for both AngularJS built-in and valdr validators.
The last name field has AngularJS and valdr validators, while the age field is of type number and therefore is automatically validated by the AngularJS number validator.
demoForm.$valid = {{demoForm.$valid}}
{{ constraints | json }}


All locations open 6AM - 8PM
503-784-1212
701 SW 6th Ave, Portland, OR
503-643-2453
1005 W Burnside St, Portland, OR
503-453-5637
4689 Lombard St, Portland, OR
503-543-6943
98 SW Naito Pkwy, Portland, OR
503-683-5738
We are the greatest makers of Salmon Cookies in the world! We have 5 locations to serve your family our delicious Pacific Northwest tradition!


What
is the WordHacker? |
|
|
Wordhacker is a program that helps the users learn English vocabulary easily and quickly. It is designed for learners of English in a myriad of countries, with a myriad of interests and linguistic needs. Based on a corpus of 20 thousand words, WordHacker specializes in presenting the words that are frequent in everyday use and words required by important English language test including TOEFL, GRE, GMAT and SAT. Academic Word List (AWL) is also offered for advanced learners.
|
|
| 2003
WordHacker Computing,Inc. All Rights Reserved |


§532-12 What not advancements. The maintaining or educating, or the giving money to a child, without a view to a portion or settlement in life, shall not be deemed an advancement. [CC 1859, §1460; RL 1925, §3313; RL 1935, §4821; RL 1945, §12081; RL 1955, §318-12; HRS §532-12]


Item Details
Description
Type
File
Folder
Filename
Open File
Open Folder
Action
Open With...
Open With...
Command line arguments
Add Favourite


Swift Driver Development Guide
Index
- Things to Install
- The Code
- Building
- Running Tests
- Writing and Generating Documentation
- Linting and Style
- Workflow
- Code Review
- Resources
Things to install
- swiftenv: a command-line tool that allows easy installation of and switching between versions of Swift.
- Jazzy: the tool we use to generate documentation.
- SwiftFormat: the Swift formatter we use.
- SwiftLint: the Swift linter we use.
- Sourcery: the tool we use for code generation.
- libmongoc: the MongoDB C driver, which this library wraps. See the installation instructions provided in our README or on the libmongoc docs.
The code
You should clone this repository, as well as the MongoDB Driver specifications. Since this library wraps the MongoDB C Driver, we also recommend cloning mongodb/mongo-c-driver so you have the source code and documentation easily accessible.
Building
From the Command line
Run swift build
or simply make
in the project’s root directory.
In Xcode
We do not provide or maintain an already-generated .xcodeproj
in our repository. Instead, you must generate it locally.
To generate the .xcodeproj
file:
- Install the Ruby gem
xcodeproj
withgem install xcodeproj
(you may need tosudo
) - Run
make project
- You’re ready to go! Open
MongoSwift.xcodeproj
and build and test as normal.
Why is this necessary? The project requires a customized “copy resources” build phase to include various test .json
files. By default, this phase is not included when you run swift package generate-xcodeproj
. So make project
first generates the project, and then uses xcodeproj
to manually add the files to the appropriate targets (see add_json_files.rb
).
Running Tests
NOTE: Several of the tests require a mongod instance to be running on the default host/port, localhost:27017
. You can start this by running mongod --setParameter enableTestCommands=1
. The enableTestCommands
parameter is required to use some test-only commands built into MongoDB that we utilize in our tests, e.g. failCommand
.
You can run tests from Xcode as usual. If you prefer to test from the command line, keep reading.
From the Command Line
We recommend installing the ruby gem xcpretty
and running tests by executing make test-pretty
, as this provides output in a much more readable format. (Works on MacOS only.)
Alternatively, you can just run the tests with swift test
, or make test
.
To filter tests by regular expression:
- If you are using
swift test
, provide the--filter
argument: for example,swift test --filter=MongoClientTests
. - If you are using
make test
ormake test-pretty
, provide theFILTER
environment variable: for example,make test-pretty FILTER=MongoCollectionTests
.
Diagnosing Backtraces on Linux
SWIFT-755 documents an outstanding problem on Linux where backtraces do not contain debug symbols. As discussed in this Stack Overflow thread, a symbolicate-linux-fatal
script may be used to add symbols to an existing backtrace. Consider the following:
$ swift test --filter CrashingTest &> crash.log
$ symbolicate-linux-fatal /path/to/MongoSwiftPackageTests.xctest crash.log
This will require you to manually provide the path to the compiled test binary (e.g. .build/x86_64-unknown-linux/debug/MongoSwiftPackageTests.xctest
).
Writing and Generating Documentation
We document new code as we write it. We use C-style documentation blocks (/** ... */
) for documentation longer than 3 lines, and triple-slash (///
) for shorter documentation.
Comments that are not documentation should use two slashes (//
).
Documentation comments should generally be complete sentences and should end with periods.
Our documentation site is automatically generated from the source code using Jazzy. We regenerate it via our release script each time we release a new version of the driver.
If you’d like to preview how new documentation you’ve written will look when published, you can regenerate it by running ./etc/generate-docs.sh
and then inspecting the generated HTML files in /docs
.
Linting and Style
We use SwiftLint for linting. You can see our configuration in the .swiftlint.yml
file in the project’s root directory. Run swiftlint
in the root directory to lint all of our files. Running swiftlint autocorrect
will correct some types of violations.
We use SwiftFormat for formatting the code. You can see our configuration in the .swiftformat
file in the project’s root directory. Our linter config contains a superset of the rules that our formatter does, so some manual tweaking may be necessary to satisfy both once the formatter is run (e.g. line length enforcement). Most of the time, the formatter should put the code into a format that passes the linter. You can run the formatter on all of the files by running swiftformat .
from the root directory.
To pass all the formatting stages of our testing matrix, both swiftlint --strict
and swiftformat --lint .
must finish successfully.
For style guidance, look at Swift’s API design guidelines and Google’s Swift Style Guide.
Editor Setup
If you have a setup for developing the driver in an editor other than the ones listed, or have found any useful tools/plugins for the listed editors, please open a pull request to add information!
Sublime Text
- For syntax highlighting, install Decent Swift Syntax via Package Control.
- For linting integration with SwiftLint, install SublimeLinter and SublimeLinter-contrib-swiftlint via Package Control.
Vim/Neovim
- You can get linting support by using
ale
byw0rp
. This will show symbols in the gutter for warnings/errors and show linter messages in the status. - swift.vim: A fork of Keith Smiley’s
swift.vim
with fixed indenting rules. This adds proper indenting and syntax for Swift to Vim. This fork also provides a match rule for column width highlighting.- Please read the NOTICE for proper credits.
Workflow
- Create a feature branch, named by the corresponding JIRA ticket if exists, along with a short descriptor of the work: for example,
SWIFT-30/writeconcern
. - Do your work on the branch.
- If you add, remove, or rename any tests, make sure to update
LinuxMain.swift
accordingly. If you are on MacOS, you can do that by runningmake linuxmain
. - Ensure your code passes both the linter and the formatter.
- Make sure your code builds and passes all tests on:
- Travis. Every time you push to GitHub or open a pull request, it will trigger a new build, which includes running the linter, formatter, and basic tests.
- (If you work at MongoDB) Evergreen - Our Evergreen matrix tests a variety of MongoDB configurations, operating systems, and Swift language versions, and provides a way to more robustly test the driver. A new Evergreen build is automatically triggered for every commit to master, but for more complex pull requests it’s a good idea to run patches on Evergreen before merging.
- Open a pull request on the repository. Make sure you have rebased your branch onto the latest commits on
master
. - Go through code review to get the team’s approval on your changes. (See the next section on Code Review for more details on this process.) Once you get the required approvals and your code passes all tests:
- Rebase on master again if needed.
- Rerun tests.
- Squash all commits into a single, descriptive commit method, formatted as:
TICKET-NUMBER: Description of changes
. For example,SWIFT-30: Implement WriteConcern type
. - Merge it, or if you don’t have permissions, ask someone to merge it for you.
Code Review
Giving a review
When giving a review, please batch your comments together to cut down on the number of emails sent to others involved in the pull request. You can do this by going to the “Files Changed” tab. When you post your first comment, press “Start a review”. When you’re done commenting, click “Finish your review” (top right). Please feel free to leave reviews on your own code when you open a pull request in order add additional context, point out an aspect of the design you’re unsure of, etc.
Responding to a review
You can use the same batching approach as above to respond to review comments. Once you’ve posted your responses and pushed new commits addressing the comments, re-request reviews from your reviewers by clicking the arrow circle icons next to their names on the list of reviewers.
Note: GitHub allows marking comment threads on pull requests as “resolved”, which hides them from view. Always allow the original commenter to resolve a conversation. This allows them to verify that your changes match what they requested before the conversation is hidden.
Resources
Swift
- Swift Language Guide
- Swift Standard Library docs
- Swift by Sundell
- Swift Forums
- Some talks by Kaitlin:


| Home | Trees | Indices | Help |
|
|---|
|
|
Created on 22-Oct-2012 @author: Anil Kumar<EMAIL_ADDRESS>TestON is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. TestON is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with TestON. If not, see <http://www.gnu.org/licenses/>. teston is the main module.
|
|||
|
TestON TestON will initiate the specified test. |
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
It facilitates the loading customised parser for topology and params file. It loads parser mentioned in tab named parser of teston.cfg file. It also loads default xmlparser if no parser have specified in teston.cfg file. |
It facilitates the loading customised parser for topology and params file. It loads parser mentioned in tab named parser of teston.cfg file. It also loads default xmlparser if no parser have specified in teston.cfg file. |
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Mon Aug 10 11:12:34 2015 | http://epydoc.sourceforge.net |


--- layout: page title: About date: 2015-07-08 16:22:08.000000000 +05:30 categories: [] tags: [] status: publish type: page published: true meta: _wp_page_template: default author: login: anukin2611 email<EMAIL_ADDRESS>display_name: anukin2611 first_name: '' last_name: '' excerpt: !ruby/object:Hpricot::Doc options: {} ---
An unapologetic version 2.0, I am a second generation Indian programmer.I have learned from the use of Internet as a medium unlike the older programmers who relied on the books.It contains random musings about coding, best practices, philosophy, quizzes and yes like every other Indian I am passionate of discussion about Indian politics and other matters concerning India as well


| LISTXATTR(2) | Linux Programmer's Manual | LISTXATTR(2) |
#include <sys/types.h> #include <sys/xattr.h>
ssize_t listxattr(const char *path, char *list, size_t size); ssize_t llistxattr(const char *path, char *list, size_t size); ssize_t flistxattr(int fd, char *list, size_t size);
listxattr() retrieves the list of extended attribute names associated with the given path in the filesystem. The retrieved list is placed in list, a caller-allocated buffer whose size (in bytes) is specified in the argument size. The list is the set of (null-terminated) names, one after the other. Names of extended attributes to which the calling process does not have access may be omitted from the list. The length of the attribute name list is returned.
llistxattr() is identical to listxattr(), except in the case of a symbolic link, where the list of names of extended attributes associated with the link itself is retrieved, not the file that it refers to.
flistxattr() is identical to listxattr(), only the open file referred to by fd (as returned by open(2)) is interrogated in place of path.
A single extended attribute name is a null-terminated string. The name includes a namespace prefix; there may be several, disjoint namespaces associated with an individual inode.
If size is specified as zero, these calls return the current size of the list of extended attribute names (and leave list unchanged). This can be used to determine the size of the buffer that should be supplied in a subsequent call. (But, bear in mind that there is a possibility that the set of extended attributes may change between the two calls, so that it is still necessary to check the return status from the second call.)
user.name1\0system.name1\0user.name2\0
Filesystems that implement POSIX ACLs using extended attributes might return a list like this:
system.posix_acl_access\0system.posix_acl_default\0
In addition, the errors documented in stat(2) can also occur.
To keep the code simple, the program assumes that attribute keys and values are constant during the execution of the program. A production program should expect and handle changes during execution of the program. For example, the number of bytes required for attribute keys might increase between the two calls to listxattr(). An application could handle this possibility using a loop that retries the call (perhaps up to a predetermined maximum number of attempts) with a larger buffer each time it fails with the error ERANGE. Calls to getxattr(2) could be handled similarly.
The following output was recorded by first creating a file, setting some extended file attributes, and then listing the attributes with the example program.
$ touch /tmp/foo $ setfattr -n user.fred -v chocolate /tmp/foo $ setfattr -n user.frieda -v bar /tmp/foo $ setfattr -n user.empty /tmp/foo $ ./listxattr /tmp/foo user.fred: chocolate user.frieda: bar user.empty: <no value>
#include <malloc.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/xattr.h> int main(int argc, char *argv[]) { ssize_t buflen, keylen, vallen; char *buf, *key, *val; if (argc != 2) { fprintf(stderr, "Usage: %s path\n", argv[0]); exit(EXIT_FAILURE); } /* * Determine the length of the buffer needed. */ buflen = listxattr(argv[1], NULL, 0); if (buflen == -1) { perror("listxattr"); exit(EXIT_FAILURE); } if (buflen == 0) { printf("%s has no attributes.\n", argv[1]); exit(EXIT_SUCCESS); } /* * Allocate the buffer. */ buf = malloc(buflen); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } /* * Copy the list of attribute keys to the buffer. */ buflen = listxattr(argv[1], buf, buflen); if (buflen == -1) { perror("listxattr"); exit(EXIT_FAILURE); } /* * Loop over the list of zero terminated strings with the * attribute keys. Use the remaining buffer length to determine * the end of the list. */ key = buf; while (buflen > 0) { /* * Output attribute key. */ printf("%s: ", key); /* * Determine length of the value. */ vallen = getxattr(argv[1], key, NULL, 0); if (vallen == -1) perror("getxattr"); if (vallen > 0) { /* * Allocate value buffer. * One extra byte is needed to append 0x00. */ val = malloc(vallen + 1); if (val == NULL) { perror("malloc"); exit(EXIT_FAILURE); } /* * Copy value to buffer. */ vallen = getxattr(argv[1], key, val, vallen); if (vallen == -1) perror("getxattr"); else { /* * Output attribute value. */ val[vallen] = 0; printf("%s", val); } free(val); } else if (vallen == 0) printf("<no value>"); printf("\n"); /* * Forward to next attribute key. */ keylen = strlen(key) + 1; buflen -= keylen; key += keylen; } free(buf); exit(EXIT_SUCCESS); }
| 2019-03-06 | Linux |


Last updated: 2020-11-18
Checks: 7 0
Knit directory: cytomapper_publication/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20200602)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 0d48ecb. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .Rproj.user/
Ignored: data/PancreasData/pancreas_images.rds
Ignored: data/PancreasData/pancreas_masks.rds
Ignored: data/PancreasData/pancreas_sce.rds
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/04-Figure_1.Rmd
) and HTML (docs/04-Figure_1.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
| File | Version | Author | Date | Message |
|---|---|---|---|---|
| Rmd | 0d48ecb | Nils Eling | 2020-11-18 | Corrected chunk name |
| Rmd | 96b285d | Nils Eling | 2020-11-18 | Set correct figure paths |
| Rmd | 194e172 | Nils Eling | 2020-11-18 | Merged Figure 1 and 2 |
This script reproduces all images contained in Figure 1. Here, we will load the libraries required for data analysis:
library(cytomapper)
In the first part, we will solely display the example data shipped with cytomapper
. They can be read in using the data
function.
data("pancreasSCE")
data("pancreasImages")
data("pancreasMasks")
We will save the segmentation masks and single-channel images for image 1 and 3 for display purposes.
plotCells(pancreasMasks[1], legend = NULL, image_title = NULL,
scale_bar = NULL, interpolate = FALSE,
save_plot = list(filename = "docs/final_figures/main/Fig_1A_mask1.png"))
plotCells(pancreasMasks[3], legend = NULL, image_title = NULL,
scale_bar = NULL, interpolate = FALSE,
save_plot = list(filename = "docs/final_figures/main/Fig_1A_mask2.png"))
for(i in 1:5){
cur_col <- list(c("black", "white"))
names(cur_col) <- channelNames(pancreasImages)[i]
cur_bcg <- list(c(0,3,1))
names(cur_bcg) <- channelNames(pancreasImages)[i]
plotPixels(pancreasImages[1], legend = NULL, image_title = NULL,
scale_bar = NULL, interpolate = FALSE, colour_by = channelNames(pancreasImages)[i],
colour = cur_col, bcg = cur_bcg,
save_plot = list(filename = paste0("docs/final_figures/main/Fig_1B_img1_ch",
i, ".png")))
plotPixels(pancreasImages[3], legend = NULL, image_title = NULL,
scale_bar = NULL, interpolate = FALSE, colour_by = channelNames(pancreasImages)[i],
colour = cur_col, bcg = cur_bcg,
save_plot = list(filename = paste0("docs/final_figures/main/Fig_1B_img2_ch",
i, ".png")))
}
We will next visualize the example cell-types on the segmentation masks and the composite images of 5 colours.
plotCells(mask = pancreasMasks[1], object = pancreasSCE, img_id = "ImageNb",
cell_id = "CellNb", colour_by = "CellType",
legend = NULL, image_title = NULL, scale_bar = list(label = "", lwidth = 5),
save_plot = list(filename = "docs/final_figures/main/Fig_1A_celltype1.png",
scale = 10))
plotCells(mask = pancreasMasks[3], object = pancreasSCE, img_id = "ImageNb",
cell_id = "CellNb", colour_by = "CellType",
legend = NULL, image_title = NULL, scale_bar = list(label = "", lwidth = 5),
save_plot = list(filename = "docs/final_figures/main/Fig_1A_celltype2.png",
scale = 10))
plotPixels(image = pancreasImages[1], object = pancreasSCE,
img_id = "ImageNb", cell_id = "CellNb",
legend = NULL, image_title = NULL, scale_bar = list(label = "", lwidth = 5),
colour_by = c("CD99", "PIN", "H3", "CD8a", "CDH"),
bcg = list(H3 = c(0, 4, 1),
CD99 = c(0, 3, 1),
PIN = c(0, 5, 1),
CD8a = c(0, 5, 1),
CDH = c(0, 2, 1)),
save_plot = list(filename = "docs/final_figures/main/Fig_1B_composite1.png",
scale = 10))
plotPixels(image = pancreasImages[3], object = pancreasSCE,
legend = NULL, image_title = NULL, scale_bar = list(label = "", lwidth = 5),
img_id = "ImageNb", cell_id = "CellNb",
colour_by = c("CD99", "PIN", "H3", "CD8a", "CDH"),
bcg = list(H3 = c(0, 1.5, 1),
CD99 = c(0, 3, 1),
PIN = c(0, 1, 1),
CD8a = c(0, 4, 1),
CDH = c(0, 2, 1)),
save_plot = list(filename = "docs/final_figures/main/Fig_1B_composite2.png",
scale = 10))
This script reproduces the analysis performed in Figure 1 C-D. Here, we will load the libraries required for data analysis:
library(dplyr)
The pre-processing scripts have generated the following files in the data/PancreasData
folder:
SingleCellExperiment
object containing the cell- and marker-specific expression and metadata.CytoImageList
object containing 100 example images of 3 donors, where each image contains 38 channelsCytoImageList
object containing 100 example masks, which are associated to and a segmentation result of the images in 2.Here, we will load all relevant libraries and read in the data.
sce <- readRDS("data/PancreasData/pancreas_sce.rds")
images <- readRDS("data/PancreasData/pancreas_images.rds")
masks <- readRDS("data/PancreasData/pancreas_masks.rds")
In type 1 diabetes (T1D), pancreatic insulin-producing beta cells are killed by self-reacting immune cells. Here, we will visualize association between T cells and beta cells in three pancreas donors at different stage of the disease (Non-diabetic, recent onset T1D and long duration T1D).
In our dataset, cell types can be visualized in the CellType
column of colData(sce)
(unique(colData(sce)$CellType)
). T cells have the cell type Tc
(CD8+) or Th
(CD4+) and beta cells are labelled as beta
.
First, we will select for each donor the image with the highest density of T cells (number of T cells per mm^2). Then, we will subset the SingleCellExperiment
object (sce
) and the CytoImageList
objects (images
and masks
).
# Select the three images with the higest T cell density
selected.images <- as_tibble(colData(sce)) %>%
# Calculate for each image the area, number of T cells and T cell density
group_by(ImageNumber) %>%
mutate(ImageArea = (width * height) / 10^6,
TcellCount = sum(CellType == "Tc" | CellType == "Th"),
TcellDensity = TcellCount / ImageArea) %>%
ungroup() %>%
# Select for each disease stage the image with the highest T cell density
group_by(stage) %>%
dplyr::slice(which.max(TcellDensity)) %>%
pull(ImageName)
print(selected.images)
[1] "J01" "E30" "G23"
# Subset the objects
cur_sce <- sce[, sce$ImageName %in% selected.images]
cur_images <- images[mcols(images)$ImageName %in% selected.images]
cur_masks <- masks[mcols(masks)$ImageName %in% selected.images]
To visualize association between islet and T cells, we will use the plotCells
function and display beta and T cells on the three images selected above.
The different cell types will be coloured as following: Tc
cells in red, Th
cells in blue, beta
cells in yellow, the other islet cells (alpha
, delta
) in cyan and the rest of the cells in white
To display only a selected number of cells, the SingleCellExperiment
can be subsetted.
cur_sce <- cur_sce[,cur_sce$CellType %in% c("beta", "alpha", "delta", "Tc", "Th")]
# Define the colors for the different cell types
ct_colours <- vector(mode = "character", length = length(unique(cur_sce$CellType)))
names(ct_colours) <- unique(cur_sce$CellType)
ct_colours["beta"] <- "yellow"
ct_colours[c("alpha", "delta")] <- "cyan"
ct_colours["Tc"] <- "red"
ct_colours["Th"] <- "blue"
# Plot the cells
plotCells(mask = cur_masks,
object = cur_sce,
cell_id = "CellNumber",
img_id = "ImageName",
colour_by = "CellType",
colour = list(CellType = ct_colours),
image_title = list(text = c("Non-diabetic",
"Recent onset T1D",
"Long duration T1D"),
colour = "black"),
scale_bar = list(length = 100,
label = expression("100 " ~ mu * "m"),
colour = "black"),
missing_colour = "white",
background_colour = "gray")
# Save figure
plotCells(mask = cur_masks,
object = cur_sce,
cell_id = "CellNumber",
img_id = "ImageName",
colour_by = "CellType",
colour = list(CellType = ct_colours),
image_title = list(text = c("Non-diabetic",
"Recent onset T1D",
"Long duration T1D"),
colour = "black"),
scale_bar = list(length = 100,
label = expression("100 " ~ mu * "m"),
colour = "black"),
missing_colour = "white",
background_colour = "gray",
save_plot = list(filename = "docs/final_figures/main/Fig_1C.png", scale = 3))
We now see that T cells are located closer to the islet on the “Recent onset T1D” image. In addition, no beta cells are visible on the “Long duration T1D” image, as expected because they have been destroyed by the immune system.
We will now confirm that this is reflected on the original images by plotting the pixel-level data with the plotPixels
function. CD4 (CD4
expressed by Th cells) will be plotted in blue, CD8 (CD8a
, Tc cells) in red and proinsulin (PIN
, beta cells) in yellow.
plotPixels(image = cur_images,
cell_id = "CellNumber",
img_id = "ImageName",
colour_by = c("PIN", "CD4", "CD8a"),
colour = list(PIN = c("black", "yellow"),
# SYP = c("black", "cyan"),
CD4 = c("black", "blue"),
CD8a = c("black", "red")),
bcg = list(PIN = c(0, 10, 1),
# SYP = c(0, 3, 1),
CD4 = c(0, 8, 1),
CD8a = c(0, 10, 1)),
image_title = list(text = c("Non-diabetic",
"Recent onset T1D",
"Long duration T1D")),
scale_bar = list(length = 100,
label = expression("100 " ~ mu * "m")))
# Save figure
plotPixels(image = cur_images,
cell_id = "CellNumber",
img_id = "ImageName",
colour_by = c("PIN", "CD4", "CD8a"),
colour = list(PIN = c("black", "yellow"),
# SYP = c("black", "cyan"),
CD4 = c("black", "blue"),
CD8a = c("black", "red")),
bcg = list(PIN = c(0, 10, 1),
# SYP = c(0, 3, 1),
CD4 = c(0, 8, 1),
CD8a = c(0, 10, 1)),
image_title = list(text = c("Non-diabetic",
"Recent onset T1D",
"Long duration T1D")),
scale_bar = list(length = 100,
label = expression("100 " ~ mu * "m")),
save_plot = list(filename = "docs/final_figures/main/Fig_1D.png", scale = 3))
This plot confirms that beta cells are surrounded by infiltrating T cells on the “Recent onset T1D” image. In addition, proinsulin abundance seems to be reduced on that image as compared to the “Non-diabetic” control image. This observation can be further explored by performing additional data analysis (see next figures).
sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.1 LTS
Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.8.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats4 stats graphics grDevices utils datasets
[8] methods base
other attached packages:
[1] dplyr_1.0.2 cytomapper_1.2.0
[3] SingleCellExperiment_1.12.0 SummarizedExperiment_1.20.0
[5] Biobase_2.50.0 GenomicRanges_1.42.0
[7] GenomeInfoDb_1.26.0 IRanges_2.24.0
[9] S4Vectors_0.28.0 BiocGenerics_0.36.0
[11] MatrixGenerics_1.2.0 matrixStats_0.57.0
[13] EBImage_4.32.0 workflowr_1.6.2
loaded via a namespace (and not attached):
[1] viridis_0.5.1 viridisLite_0.3.0 svgPanZoom_0.3.4
[4] shiny_1.5.0 sp_1.4-4 GenomeInfoDbData_1.2.4
[7] vipor_0.4.5 tiff_0.1-6 yaml_2.2.1
[10] gdtools_0.2.2 pillar_1.4.6 lattice_0.20-41
[13] glue_1.4.2 digest_0.6.27 RColorBrewer_1.1-2
[16] promises_1.1.1 XVector_0.30.0 colorspace_2.0-0
[19] htmltools_0.5.0 httpuv_1.5.4 Matrix_1.2-18
[22] pkgconfig_2.0.3 raster_3.4-5 zlibbioc_1.36.0
[25] purrr_0.3.4 xtable_1.8-4 fftwtools_0.9-9
[28] scales_1.1.1 svglite_<IP_ADDRESS> whisker_0.4
[31] jpeg_0.1-8.1 later_<IP_ADDRESS> git2r_0.27.1
[34] tibble_3.0.4 generics_0.1.0 ggplot2_3.3.2
[37] ellipsis_0.3.1 magrittr_2.0.1 crayon_1.3.4
[40] mime_0.9 evaluate_0.14 fs_1.5.0
[43] beeswarm_0.2.3 shinydashboard_0.7.1 tools_4.0.3
[46] lifecycle_0.2.0 stringr_1.4.0 munsell_0.5.0
[49] locfit_1.5-9.4 DelayedArray_0.16.0 compiler_4.0.3
[52] systemfonts_0.3.2 rlang_0.4.8 grid_4.0.3
[55] RCurl_1.98-1.2 rstudioapi_0.13 htmlwidgets_1.5.2
[58] bitops_1.0-6 rmarkdown_2.5 gtable_0.3.0
[61] codetools_0.2-18 abind_1.4-5 R6_2.5.0
[64] gridExtra_2.3 knitr_1.30 fastmap_1.0.1
[67] rprojroot_2.0.2 stringi_1.5.3 ggbeeswarm_0.6.0
[70] Rcpp_1.0.5 vctrs_0.3.5 png_0.1-7
[73] tidyselect_1.1.0 xfun_0.19


Download MetaMask Chrome Extension - Every data upload to the Contract requires some Transaction Fees and this is paid using Ethereum Cryptocurrency, to simplify this process MetaMask Chrome Extension Wallet is used, read Here
Get Kovan TestCoins - This application is deployed on Kovan TestNet, users need to select Kovan TestNet in their MetaMask wallets and get Test Coins (These are free) from Here
- Like the Physical Contracts between organizations in Real World, smart contracts define the terms and conditions of contracts on a Digital Ledger, what makes these contracts 'Smart' is their capability of making automatic payments, when certain conditions are met.
- They automate the task of verification and payment processing and remove the third parties involved in the process thus making it more secure and faster.
- Once deployed a smart contract is tamper proof, and will permanently reside over the ledger, payments are done using Cryptocurrencies like Ethereum between organizations.
Ethereum Smart Contracts - Provide the database to save the contract details and terms and conditions. The users interact with these contracts which are hosted on the Kovan TestNet. Smart Contract will be drafted by the Landlord and the Tenant will confirm the details which will make the contract active after Government Verification.


| Overview | Module | Use | Devguide | Index |
| Nested Modules | Services | Singletons | Interfaces | Structs | Exceptions | Enums | Typedefs | Constant Groups |
| module view |
|
| Services | |
| OfficeDocumentView | specifies a view of a standard office document. |
| PrintOptions | describes the options for print jobs. |
| PrintSettings | provides access to the settings for printing documents. |
| PrinterDescriptor | describes a printer by specifying the queue name and some settings. |
| RenderDescriptor | describes the options for Render jobs. |
| RenderOptions | describes the options for Render jobs. |
| ViewSettings | provides access to the settings of the controller of an office document. |
| Interfaces | |
| XControlAccess | provides access to the controls in a view. |
| XFormLayerAccess | provides access to the form layer elements in a view |
| XLineCursor | makes it possible to move a cursor by lines within laid out text. |
| XMultiSelectionSupplier | makes it possible to append and remove objects from a selection. |
| XPrintJob | allows for getting information about a print job. |
| XPrintJobBroadcaster | allows for getting information about a print job. |
| XPrintJobListener | receives events about print job progress. |
| XPrintPreview | [ DEPRECATED ] |
| XPrintSettingsSupplier | offers printing related settings, which affect document rendering, but are not related to the printer itself. |
| XPrintable | offers printing functionality. |
| XPrintableBroadcaster | allows for getting information about a print job. |
| XPrintableListener | receives events about print job progress. |
| XRenderable | represents something that can be rendered. |
| XScreenCursor | makes it possible to page through the document in steps of the displayed size. |
| XSelectionChangeListener | makes it possible to receive an event when the current selection changes. |
| XSelectionSupplier | makes it possible to access and change the selection in a view. |
| XViewCursor | makes it possible to move a cursor up/down/left/right within laid out text. |
| XViewSettingsSupplier | provides access to the view settings of the object. |
| Structs | |
| PrintJobEvent | specifies the print progress of an XPrintJob. |
| PrintableStateEvent | specifies the print progress of an XPrintable. |
| Enums | |
| PaperFormat | specifies the format (size) of the paper on a text document. |
| PaperOrientation | specifies the orientation of the paper. |
| PrintableState | specifies the print progress of an XPrintable. |
| SelectionType | Specifies a selection type for a view that supports a selection model. |
| Constant Groups | |
| DocumentZoomType | These constants specify how the document content is zoomed into the document view. |
| DuplexMode | These constants specify available duplex modes |
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Example Input:
Line 1: An upper case character string of length 1..6 that is the name of the comet.
Line 2: An upper case character string of length 1..6 that is the name of the group.
Example Output:A single line containing either the word "GO" or the word "STAY".
| Here Goes The Code |
|
Test Cases
| Input | Output |
STARAB USACO | STAY |
| Input | Output |
EARTH LEFTB | GO |
| Input | Output |
PULSAR VENUS | STAY |
| Input | Output |
KANSAS UTAH | STAY |
| Input | Output |
APPLE URSA | GO |
| Input | Output |
MSFT MARS | STAY |
| Input | Output |
PLUTO BKHOLE | STAY |
| Input | Output |
COWSBC RIGHT | GO |
| Input | Output |
DRKMTR SNIKER | STAY |


Our Goal, Vision & Commitment
Register & Help Make Change
Volunteer, Participate, or Donate
Female Robotics Team Wins Major Award
Women Overtake Men in College Degrees
Countries with the Best Parental Leave Policies
Charlotte Bronte, Jane Eyre


About
My name is André Frederico, but you can call me Fred Silva. ;)
I am a Computer Engineer, specialized in Computer networks with over 15 years of experience in IT. During all this time, I have accumulated some diversified skills, always looking for business success. I have been studying and improving myself in the past 2 years for migrating to DevOps/SRE career.
Some of my experiences:
- Cloud Administration: Amazon Web Service (AWS);
- Infrastructure as Code: Terraform, Packer;
- Application migration to Cloud;
- Datacenter management;
- Virtualization: VMWare;
- Operational Systems: Linux, Microsoft;
- Web Related Services: DNS, Varnish, Apache, NGINX, HAproxy;
- User Related Services: Domain Control, User Administration;
- Security Related Services: Firewall, Proxy, Palo Alto Equipment;
- Network Administration: Wired, Wireless, VoIP;
- etc;


Left Click to place the Start Node
Right Click to place the Goal Node
Middle Click to place obstacles


public final class IndexFileNames extends Object
matchesExtension
), as well as generating file names from a segment name,
generation and extension (
fileNameFromGeneration
,
segmentFileName
).
| Modifier and Type | Field and Description |
|---|---|
static
String
[]
|
COMPOUND_EXTENSIONS
File extensions of old-style index files
|
static
String
|
COMPOUND_FILE_EXTENSION
Extension of compound file
|
static
String
|
COMPOUND_FILE_STORE_EXTENSION
Extension of compound file for doc store files
|
static
String
|
DELETABLE
Name of the index deletable file (only used in
pre-lockless indices)
|
static
String
|
DELETES_EXTENSION
Extension of deletes
|
static
String
|
FIELD_INFOS_EXTENSION
Extension of field infos
|
static
String
|
FIELDS_EXTENSION
Extension of stored fields file
|
static
String
|
FIELDS_INDEX_EXTENSION
Extension of stored fields index file
|
static
String
|
FREQ_EXTENSION
Extension of freq postings file
|
static
String
|
GEN_EXTENSION
Extension of gen file
|
static
String
[]
|
INDEX_EXTENSIONS
This array contains all filename extensions used by
Lucene's index files, with two exceptions, namely the
extension made up from
.f
+ a number and
from
.s
+ a number.
|
static
String
[]
|
INDEX_EXTENSIONS_IN_COMPOUND_FILE
File extensions that are added to a compound file
(same as above, minus "del", "gen", "cfs").
|
static
String
[]
|
NON_STORE_INDEX_EXTENSIONS
|
static
String
|
NORMS_EXTENSION
Extension of norms file
|
static
String
|
PLAIN_NORMS_EXTENSION
Extension of plain norms
|
static
String
|
PROX_EXTENSION
Extension of prox postings file
|
static
String
|
SEGMENTS
Name of the index segment file
|
static
String
|
SEGMENTS_GEN
Name of the generation reference file name
|
static
String
|
SEPARATE_NORMS_EXTENSION
Extension of separate norms
|
static
String
[]
|
STORE_INDEX_EXTENSIONS
|
static
String
|
TERMS_EXTENSION
Extension of terms file
|
static
String
|
TERMS_INDEX_EXTENSION
Extension of terms index file
|
static
String
[]
|
VECTOR_EXTENSIONS
File extensions for term vector support
|
static
String
|
VECTORS_DOCUMENTS_EXTENSION
Extension of vectors documents file
|
static
String
|
VECTORS_FIELDS_EXTENSION
Extension of vectors fields file
|
static
String
|
VECTORS_INDEX_EXTENSION
Extension of vectors index file
|
| Constructor and Description |
|---|
IndexFileNames
()
|
| Modifier and Type | Method and Description |
|---|---|
static
String
|
fileNameFromGeneration
(
String
base,
String
ext,
long gen)
Computes the full file name from base, extension and generation.
|
static boolean
|
isDocStoreFile
(
String
fileName)
Returns true if the provided filename is one of the doc store files (ends
with an extension in
STORE_INDEX_EXTENSIONS
).
|
static boolean
|
isSeparateNormsFile
(
String
filename)
Returns true if the given filename ends with the separate norms file
pattern:
SEPARATE_NORMS_EXTENSION + "[0-9]+"
.
|
static boolean
|
matchesExtension
(
String
filename,
String
ext)
Returns true if the given filename ends with the given extension.
|
static
String
|
segmentFileName
(
String
segmentName,
String
ext)
Returns the file name that matches the given segment name and extension.
|
static
String
|
stripSegmentName
(
String
filename)
Strips the segment file name out of the given one.
|
public static final String SEGMENTS
public static final String SEGMENTS_GEN
public static final String DELETABLE
public static final String NORMS_EXTENSION
public static final String FREQ_EXTENSION
public static final String PROX_EXTENSION
public static final String TERMS_EXTENSION
public static final String TERMS_INDEX_EXTENSION
public static final String FIELDS_INDEX_EXTENSION
public static final String FIELDS_EXTENSION
public static final String VECTORS_FIELDS_EXTENSION
public static final String VECTORS_DOCUMENTS_EXTENSION
public static final String VECTORS_INDEX_EXTENSION
public static final String COMPOUND_FILE_EXTENSION
public static final String COMPOUND_FILE_STORE_EXTENSION
public static final String DELETES_EXTENSION
public static final String FIELD_INFOS_EXTENSION
public static final String PLAIN_NORMS_EXTENSION
public static final String SEPARATE_NORMS_EXTENSION
public static final String GEN_EXTENSION
public static final String [] INDEX_EXTENSIONS
.f
+ a number and
from
.s
+ a number. Also note that
Lucene's
segments_N
files do not have any
filename extension.
public static final String [] INDEX_EXTENSIONS_IN_COMPOUND_FILE
public static final String [] STORE_INDEX_EXTENSIONS
public static final String [] NON_STORE_INDEX_EXTENSIONS
public static final String [] COMPOUND_EXTENSIONS
public static final String [] VECTOR_EXTENSIONS
public static final String fileNameFromGeneration( String base, String ext, long gen)
ext
is
not an empty string.
base
- main part of the file name
ext
- extension of the filename
gen
- generation
public static final boolean isDocStoreFile( String fileName)
STORE_INDEX_EXTENSIONS
).
public static final String segmentFileName( String segmentName, String ext)
ext
is not empty.
public static final boolean matchesExtension( String filename, String ext)
public static final String stripSegmentName( String filename)
segmentFileName(java.lang.String, java.lang.String)
or
fileNameFromGeneration(java.lang.String, java.lang.String, long)
to create your
files, then this method simply removes whatever comes before the first '.',
or the second '_' (excluding both), in case of deleted docs.
public static boolean isSeparateNormsFile( String filename)
SEPARATE_NORMS_EXTENSION + "[0-9]+"
.


Ooh...... Dm7 Bb6 Csus4 Dsus4 Dm7 Bb6 Csus4 Dsus4 I am mended, I'll be with you Doo doo doo... Ooh......


Usageedit
Once a RestClient
instance has been created as shown in Initialization,
a Sniffer
can be associated to it. The Sniffer
will make use of the provided RestClient
to periodically (every 5 minutes by default) fetch the list of current nodes from the cluster
and update them by calling RestClient#setNodes
.
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); Sniffer sniffer = Sniffer.builder(restClient).build();
It is important to close the Sniffer
so that its background thread gets
properly shutdown and all of its resources are released. The Sniffer
object should have the same lifecycle as the RestClient
and get closed
right before the client:
sniffer.close(); restClient.close();
The Sniffer
updates the nodes by default every 5 minutes. This interval can
be customized by providing it (in milliseconds) as follows:
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); Sniffer sniffer = Sniffer.builder(restClient) .setSniffIntervalMillis(60000).build();
It is also possible to enable sniffing on failure, meaning that after each
failure the nodes list gets updated straightaway rather than at the following
ordinary sniffing round. In this case a SniffOnFailureListener
needs to
be created at first and provided at RestClient
creation. Also once the
Sniffer
is later created, it needs to be associated with that same
SniffOnFailureListener
instance, which will be notified at each failure
and use the Sniffer
to perform the additional sniffing round as described.
SniffOnFailureListener sniffOnFailureListener = new SniffOnFailureListener(); RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200)) .setFailureListener(sniffOnFailureListener) .build(); Sniffer sniffer = Sniffer.builder(restClient) .setSniffAfterFailureDelayMillis(30000) .build(); sniffOnFailureListener.setSniffer(sniffer);
|
Set the failure listener to the |
|
|
When sniffing on failure, not only do the nodes get updated after each
failure, but an additional sniffing round is also scheduled sooner than usual,
by default one minute after the failure, assuming that things will go back to
normal and we want to detect that as soon as possible. Said interval can be
customized at |
|
|
Set the |
The Elasticsearch Nodes Info api doesn’t return the protocol to use when
connecting to the nodes but only their host:port
key-pair, hence http
is used by default. In case https
should be used instead, the
ElasticsearchNodesSniffer
instance has to be manually created and provided
as follows:
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); NodesSniffer nodesSniffer = new ElasticsearchNodesSniffer( restClient, ElasticsearchNodesSniffer.DEFAULT_SNIFF_REQUEST_TIMEOUT, ElasticsearchNodesSniffer.Scheme.HTTPS); Sniffer sniffer = Sniffer.builder(restClient) .setNodesSniffer(nodesSniffer).build();
In the same way it is also possible to customize the sniffRequestTimeout
,
which defaults to one second. That is the timeout
parameter provided as a
querystring parameter when calling the Nodes Info api, so that when the
timeout expires on the server side, a valid response is still returned
although it may contain only a subset of the nodes that are part of the
cluster, the ones that have responded until then.
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); NodesSniffer nodesSniffer = new ElasticsearchNodesSniffer( restClient, TimeUnit.SECONDS.toMillis(5), ElasticsearchNodesSniffer.Scheme.HTTP); Sniffer sniffer = Sniffer.builder(restClient) .setNodesSniffer(nodesSniffer).build();
Also, a custom NodesSniffer
implementation can be provided for advanced
use-cases that may require fetching the `Node`s from external sources rather
than from Elasticsearch:
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); NodesSniffer nodesSniffer = new NodesSniffer() { @Override public List<Node> sniff() throws IOException { return null; } }; Sniffer sniffer = Sniffer.builder(restClient) .setNodesSniffer(nodesSniffer).build();


This webapp implements the Artistic Colour Appearance Model.
It is a standard in the art community that when you use the HSV colour model for your colour picker, you adjust the H-slider as you darken the colour to make it look more vibrant. The ACAM (pronounced /'æɪ.kæm/) generalises the idea using the single parameter Variance over the OKLab colour space.
Read more about the ACAM here!
Before you start, select the right RGB Model. If you do not know what the RGB Model is, select the sRGB; if you are using an Apple device, select the Display P3.
First, select the Eigencolour. The Eigencolour is the true colour of the object.
Second, select the Highlight Colour and adjust the Highlight Mix as needed.
Third, adjust the Variance slider so the colour gradient looks vibrant enough.
Last, pick the desired colour by simply clicking and dragging on the gradient square. The Hex Code can be copied by clicking on the Selected Colour swatch.


anyauthput.c
Download anyauthput.c raw
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2017, Daniel Stenberg<EMAIL_ADDRESS>et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
***************************************************************************/
/* <DESC>
* HTTP PUT upload with authentiction using "any" method. libcurl picks the
* one the server supports/wants.
* </DESC>
*/
#include <stdio.h>
#include <fcntl.h>
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <curl/curl.h>
#if LIBCURL_VERSION_NUM < 0x070c03
#error "upgrade your libcurl to no less than 7.12.3"
#endif
/*
* This example shows a HTTP PUT operation with authentiction using "any"
* type. It PUTs a file given as a command line argument to the URL also given
* on the command line.
*
* Since libcurl 7.12.3, using "any" auth and POST/PUT requires a set ioctl
* function.
*
* This example also uses its own read callback.
*/
/* ioctl callback function */
static curlioerr my_ioctl(CURL *handle, curliocmd cmd, void *userp)
{
int *fdp = (int *)userp;
int fd = *fdp;
(void)handle; /* not used in here */
switch(cmd) {
case CURLIOCMD_RESTARTREAD:
/* mr libcurl kindly asks as to rewind the read data stream to start */
if(-1 == lseek(fd, 0, SEEK_SET))
/* couldn't rewind */
return CURLIOE_FAILRESTART;
break;
default: /* ignore unknown commands */
return CURLIOE_UNKNOWNCMD;
}
return CURLIOE_OK; /* success! */
}
/* read callback function, fread() look alike */
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
ssize_t retcode;
curl_off_t nread;
int *fdp = (int *)stream;
int fd = *fdp;
retcode = read(fd, ptr, size * nmemb);
nread = (curl_off_t)retcode;
fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
" bytes from file\n", nread);
return retcode;
}
int main(int argc, char **argv)
{
CURL *curl;
CURLcode res;
int hd;
struct stat file_info;
char *file;
char *url;
if(argc < 3)
return 1;
file = argv[1];
url = argv[2];
/* get the file size of the local file */
hd = open(file, O_RDONLY);
fstat(hd, &file_info);
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
/* which file to upload */
curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&hd);
/* set the ioctl function */
curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, my_ioctl);
/* pass the file descriptor to the ioctl callback as well */
curl_easy_setopt(curl, CURLOPT_IOCTLDATA, (void *)&hd);
/* enable "uploading" (which means PUT when doing HTTP) */
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
/* specify target URL, and note that this URL should also include a file
name, not only a directory (as you can do with GTP uploads) */
curl_easy_setopt(curl, CURLOPT_URL, url);
/* and give the size of the upload, this supports large file sizes
on systems that have general support for it */
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
(curl_off_t)file_info.st_size);
/* tell libcurl we can use "any" auth, which lets the lib pick one, but it
also costs one extra round-trip and possibly sending of all the PUT
data twice!!! */
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
/* set user name and password for the authentication */
curl_easy_setopt(curl, CURLOPT_USERPWD, "user:password");
/* Now run off and do what you've been told! */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
close(hd); /* close the local file */
curl_global_cleanup();
return 0;
}


Invite
Commands
Information
Support Server
Contact
Contact
Send a mail to
<EMAIL_ADDRESS>OR
Make a ticket on the support server, click
HERE
for a invite.
OR
DM me on Discord: PieterSpruijt#5136


This game will confuse
Though it is sure to amuse
Welcome to The Ruse
What does it sound like?!?
But how does it compare to other games?!?
| Fun Gameplay | Confusing but Enjoyable Story |
Endless Replayability | |
|---|---|---|---|
| The Ruse | Yes | Yes | Yes |
| Fallout 76 | No | No | No |
| Metal Gear | Yes | Yes | No |
But what's the gameplay like?!?


Explore and share the best Fanmade Anime GIFs and most popular animated GIFs here on AniArt Today. With AniArt Today, maker of GIF Keyboard, add popular Fan Made Anime animated GIFs to your conversations. Share the best GIFs now!


https://www.blackhat.com/docs/us-17/thursday/us-17-Lackey-Practical%20Tips-for-Defending-Web-Applications-in-the-Age-of-DevOps.pdf
https://jvehent.github.io/continuous-security-talk/#/
CONTINUOUS SECURITY IS A CYCLE
design new feature
assess risks
implement feature
test security
deploy
get attacked
fight back
learn
rinse and repeat
SECURITY MUST BE PART OF THE PRODUCT
Not an afterthought built on top
Be a member of the DevOps team
Understand the roadmap
Share the successes
Share the failures
Write code that makes things better