Jolien put an unsteady hand to where the wound had been in Dailin’s middle; when she touched smooth skin, she gasped as if she had not believed her own eyes.
Nynaeve straightened, drying her hands on her cloak. Egwene had to admit that good wool did better for a towel than silk or velvet. “I said wash her and get some clothes on her,” Nynaeve snapped.
“Yes, Wise One,” Jolien said quickly, and she, Chiad, and Bain all leaped to obey.
A short laugh burst from Aviendha, a laugh almost at the edge of tears. “I have heard that a Wise One in the Jagged Spire sept is said to be able to do this, and one in the Four Holes sept, but I always thought it was boasting.” She drew a deep breath, regaining her composure. “Aes Sedai, I owe you a debt. My water is yours, and the shade of my septhold will welcome you. Dailin is my second-sister.” She saw Nynaeve’s uncomprehending look and added, “She is my mother’s sister’s daughter. Close blood, Aes Sedai. I owe a blood debt.”
“If I have any blood to spill,” Nynaeve said dryly, “I will spill it myself. If you wish to repay me, tell me if there is a ship at Jurene. The next village south of here?”
“The village where the soldiers fly the White Lion banner?” Aviendha said. “There was a ship there when I scouted yesterday. The old stories mention ships, but it was strange to see one.”
“The Light send it is still there.” Nynaeve began putting away her folded papers of powdered herbs. “I have done what I can for the girl, Aviendha, and we must go on. All that she needs now is food and rest. And try not to let people stick swords in her.”
“What comes, comes, Aes Sedai,” the Aiel woman replied.
“Aviendha,” Egwene said, “feeling as you do about rivers, how do you cross them? I am sure there is at least one river nearly as big as the Erinin between here and the Waste.”
“The Alguenya,” Elayne said. “Unless you went around it.”
“You have many rivers, but some have things called bridges where we had need to cross, and others we could wade. For the rest, Jolien remembered that wood floats.” She slapped the trunk of a tall whitewood. “These are big, but they float as well as a branch.  She said it matter-of-factly.
Egwene stared in wonder. If she were as afraid of something as the Aiel obviously were of rivers, could she make herself face it the way they did? She did not think so. What about the Black Ajah, a small voice asked. Have you stopped being afraid of them? That is different, she told it. There’s no bravery in that. I either hunt them, or else I sit like a rabbit waiting for a hawk. She quoted the old saying to herself. “It is better to be the hammer than the nail.”
“We had best be on our way,” Nynaeve said.
“In a moment,” Elayne told her. “Aviendha, why have you come all this way and put up with such hardship?”
Aviendha shook her head disgustedly. “We have not come far at all; we were among the last to set out. The Wise Ones nipped at me like wild dogs circling a calf, saying I had other duties.” Suddenly she grinned, gesturing to the other Aiel. “These stayed back to taunt me in my misery, so they said, but I do not think the Wise Ones would have let me go if they had not been there to companion me.”
“We seek the one foretold,” Bain said. She was holding a sleeping Dailin so Chiad could slip a shirt of brown linen onto her. “He Who Comes With the Dawn.”
“He will lead us out of the Three-fold Land,” Chiad added. “The prophecies say he was born of Far Dareis Mai.”
Elayne looked startled. “I thought you said the Maidens of the Spear were not allowed to have children. I am sure I was taught that.” Bain and Chiad exchanged those looks again, as if Elayne had come near truth and yet missed it once more.
 She, too, sounded as if she were explaining that stone is hard. “Every woman wants to foster such a child in the hope she may raise He Who Comes With the Dawn.”
“Or she may give up the spear and wed the man,” Chiad said, and Bain added, “There are sometimes reasons one must give up the spear.”
Aviendha gave them a level look, but continued as if they had not spoken. “Except that now the Wise Ones say he is to be found here, beyond the Dragonwall. ‘Blood of our blood mixed with the old blood, raised by an ancient blood not ours.’ I do not understand it, but the Wise Ones spoke in such a way as to leave no doubts.” She paused, obviously choosing her words. “You have asked many questions, Aes Sedai. I wish to ask one. You must understand that we look for omens and signs. Why do three Aes Sedai walk a land where the only hand without a knife in it is a hand too weak with hunger to grasp the hilt? Where do you go?”
“Tear,” Nynaeve said briskly, “unless we stay here talking until the Heart of the Stone crumbles to dust.” Elayne began adjusting the cord of her bundle and the strap of her script for walking, and after a moment Egwene did the same.
The Aiel women were looking at one another, Jolien frozen in the act of closing Dailin’s gray-brown coat. “Tear?” Aviendha said in a cautious tone. “Three Aes Sedai walking through a troubled land on their way to Tear. This is a strange thing. Why do you go to Tear, Aes Sedai?”
Egwene glanced at Nynaeve. Light, a moment ago they were laughing, and now they’re as tense as they ever were.
“We hunt some evil women,” Nynaeve said carefully. “Darkfriends.”
“Shadowrunners.” Jolien twisted her mouth around the word as if she had bitten into a rotten apple.
“Shadowrunners in Tear,” Bain said, and as if part of the same sentence Chiad added, “And three Aes Sedai seeking the Heart of the Stone.”
“I did not say we were going to the Heart of the Stone,” Nynaeve said sharply. “I merely said I did not want to stay here till it falls to dust. Egwene, Elayne, are you ready?” She started out of the thicket without waiting for an answer, walking staff thumping the ground and long strides carrying her south.
Egwene and Elayne made hasty goodbyes before following after her. The four Aiel on their feet stood watching them go.
When the two of them were a little way beyond the trees, Egwene said, “My heart almost stopped when you named yourself.  The Aiel War was not that long ago, and whatever they said about not harming women who don’t carry spears, they looked ready enough to use those spears on anything, to me.”
Elayne shook her head ruefully. “I have just learned how much I do not know about the Aiel, but I was taught that they do not think of the Aiel War as a war at all. From the way they behaved toward me, I think maybe that much of what I learned is truth.  I do not care how much they fight among themselves, a war is a war.”
“Not to them. Thousands of Aiel crossed the Spine of the World, but apparently they saw themselves more like thief-takers, or headsmen, come after King Laman of Cairhien for the crime of cutting down Avendoraldera. To the Aiel, it was not a war; it was an execution.”
Avendoraldera, according to one of Verin’s lectures, had been an offshoot of the Tree of Life itself, brought to Cairhien some four hundred years ago as an unprecedented offer of peace from the Aiel, given along with the right to cross the Waste, a right otherwise given to none but peddlers, gleemen, and the Tuatha’an. Much of Cairhien’s wealth had been built on the trade in ivory and perfumes and spices and, most of all, silk, from the lands beyond the Waste. Not even Verin had any idea of how the Aiel had come by a sapling of Avendesora—for one thing, the old books were clear that it made no seed; for another, no one knew where the Tree of Life was, except for a few stories that were clearly wrong, but surely the Tree of Life could have nothing to do with the Aiel—or of why the Aiel had called the Cairhienin the Watersharers, or insisted their trains of merchant wagons fly a banner bearing the trefoil leaf of Avendesora.
Egwene supposed, grudgingly, that she could understand why they had started a war—even if they did not think it was one—after King Laman cut down their gift to make a throne unlike any other in the world. Laman’s Sin, she had heard it called. According to Verin, not only had Cairhien’s trade across the Waste ended with the war, but those Cairhienin who ventured into the Waste now vanished. Verin claimed they were said to be “sold as animals” in the lands beyond the Waste, but not even she understood how a man or a woman could be sold.
“Egwene,” Elayne said, “you know who He Who Comes With the Dawn must be, don’t you?”
Staring at Nynaeve’s back still well ahead of them, Egwene shook her head—Does she mean to race us to Jurene?—then almost stopped walking. “You do not mean—?”
Elayne nodded. “I think so. I do not know much of the Prophecies of the Dragon, but I have heard a few lines. One I remember is, ‘On the slopes of Dragonmount shall he be born, born of a maiden wedded to no man.’ Egwene, Rand does look like an Aiel. Well, he looks like the pictures I have seen of Tigraine, too, but she vanished before he was born, and I hardly think she could have been his mother anyway. I think Rand’s mother was a Maiden of the Spear.”
Egwene frowned in thought as she hurried along, running everything she knew of Rand’s birth through her head. He had been raised by Tam al’Thor after Kari al’Thor died, but if what Moiraine said was true, they could not be his real mother and father. Nynaeve had sometimes seemed to know some secret about Rand’s birth. But I will bet I couldn’t pry it out of her with a fork!
They caught up to Nynaeve, Egwene glowering as she thought, Nynaeve staring straight ahead toward Jurene and that ship, and Elayne frowning at the pair of them as if they were two children sulking over who should have the larger piece of cake.
After a time of silent strides, Elayne said, “You handled that very well, Nynaeve. The Healing, and the rest, too. I do not think they ever doubted you were Aes Sedai. Or that we all were, because of the way you bore yourself.”
“You did do a good job,” Egwene said after a minute. “That was the first time I have ever really watched what is done during a Healing. It makes making lightning look like mixing oatcake.”
A surprised smile appeared on Nynaeve’s face. “Thank you,” she murmured, and reached over to give Egwene’s hair a little tug the way she had when Egwene was a little girl.
I am not a little girl any longer. The moment passed as quickly as it had come, and they went on in silence once more. Elayne sighed loudly.
They covered another mile, or a little more, swiftly, despite swinging in from the river to go around the thickets along the bank. Nynaeve insisted on staying well clear of the trees. Egwene thought it was silly to think more Aiel would be hiding in the copses, but the swing inland did not add much distance to what they had to cover; none of the growths were very big.
Elayne watched the trees, though, and she was the one who suddenly screamed, “Look out!”
Egwene jerked her head around; men were stepping out from among the trees, slings whirling ’round their heads. She reached for saidar, and something struck her head, and darkness drank everything.
Egwene could feel herself swaying, feel something moving under her.  She tried to raise a hand to her temples, but something dug into her wrists, and her hands did not move.
“—better than lying there all day waiting for dark,” a man’s rough voice said. “Who knows if another ship would come by close in? And I don’t trust that boat. It leaks.”
“You do better hope Adden does believe you did see those rings before you did decide,” another man said. “He does want fat cargoes, not women, I think.” the first man muttered something coarse about what Adden could do with his leaky boat, and the cargoes, too.
Her eyes opened. Silver-flecked spots danced across her vision; she thought she might be going to throw up on the ground swaying past under her head. She was tied across the back of a horse, her wrists and ankles joined by a rope running under its belly, her hair hanging down.
It was still daylight. She craned her neck to look around. So many rough-dressed men on horses surrounded her that she could not see whether Nynaeve and Elayne had been captured, as well. Some of the men wore bits of armor—a battered helmet, or a dented breastplate, or a jerkin sewn all over with metal scales—but most wore only coats that had not been cleaned in months, if ever. From the smell, the men had not cleaned themselves in months, either. They all wore swords, at their waists or on their backs.
Rage hit her, and fear, but most of all white-hot anger. I won’t be a prisoner. I won’t be bound! I won’t! She reached for saidar and the pain nearly lifted the top of her head; she barely stifled a moan.
The horse paused for a moment of shouts and the creak of rusty hinges, then went ahead a little further, and the men began to dismount. As they moved apart, she could see something of where they were. A log palisade surrounded them, built atop a large, round earthen mound, and men with bows stood guard on a wooden walk built just high enough for them to see over the rough-hewn ends of the logs. One low, windowless log house seemed to be built into the mounded dirt under the wall. There was no other structure beyond a few lean-to sheds. Aside from the men and horses that had just entered, the rest of the open space was filled with cook fires, and tethered horses, and more unwashed men. There must have been at least a hundred. Caged goats and pigs and chickens filled the air with squeals and grunts and clucks that blended with coarse shouts and laughter to make a din that pierced her head.
Her eyes found Nynaeve and Elayne, bound head down across saddleless horses as she was. Neither seemed to be stirring; the very end of Nynaeve’s braid dragged across the dirt as her horse stirred. A small hope faded; that one of them might be free, to help whoever was held escape. Light, I cannot stand to be a prisoner again. Not again. Gingerly, she tried reaching for saidar again. The pain was not so bad this time—merely as if someone had dropped a rock on her head—but it shattered the emptiness before she could even think of a rose.
“One of them’s awake!” a man’s panicked voice shouted.
Egwene tried to hang limp and look unthreatening. How in the Light could I look threatening tied up like a sack of meal! Burn me, I have to buy time. I have to! “I will not harm you,” she told the sweaty-faced fellow who came running toward her. Or she tried to tell him. She was not sure how much she had actually said before something crashed into her head again and darkness rolled over her in a wave of nausea.
Waking was easier the next time. Her head still hurt, but not as much as it had, though her thoughts did seem to spin dizzily. At least my stomach isn’t . . . Light, I’d better not think of that. There was a taste of sour wine and something bitter in her mouth. Strips of lamplight showed through horizontal cracks in a crudely made wall, but she lay in darkness, on her back. On dirt, she thought. The door did not seem to fit well either, but it looked all too sturdy.
She pushed herself to her hands and knees, and was surprised to find she was not tied in any way. Except for that one wall of unpeeled logs, the others all seemed to be of rough stone. The light through the cracks was enough to show her Nynaeve and Elayne lying sprawled on the dirt. There was blood on the Daughter-Heir’s face. Neither of them moved except for the rise and fall of their chests as they breathed. Egwene hesitated between trying to wake them immediately and seeing what lay on the other side of that wall. Just a peek, she told herself. I might as well see what we have guarding us before I wake them.
She told herself it was not because she was afraid she might be unable to waken them. As she put her eye to one of the cracks near the door, she thought of the blood on Elayne’s face and tried to remember exactly what it was Nynaeve had done for Dailin.
The next room was large—it had to be all the rest of the log building she had seen—and windowless, but brightly lit with gold and silver lamps hanging from spikes driven into the walls and the logs that made the high ceiling. There was no fireplace. On the packed dirt floor farm-house tables and chairs mingled with chests covered in gilt-work and inlaid with ivory. A carpet woven in peacocks lay beside a huge canopied bed, piled deep with filthy blankets and comforters, with elaborately carved and gilded posts.
A dozen men stood or sat around the room, but all eyes were on one large, fair-haired man who might have been handsome if his face were cleaner. He stood staring down at the top of a table with fluted legs and gilded scrollwork, one hand on his sword hilt, a finger of the other pushing something she could not make out in small circles on the tabletop.
The outer door opened, revealing night outside, and a lanky man with his left ear gone came in. “He has no come, yet,” he said roughly. He was missing two fingers on his left hand, too. “I do no like dealing with that kind.”
The big, fair-haired man paid him no mind, only kept moving whatever it was on the table. “Three Aes Sedai,” he murmured, then laughed. “Good prices for Aes Sedai, if you have the belly to deal with the right buyer.  Not so safe as slitting the crew’s throats on a trader’s ship, eh, Coke? Not so easy, wouldn’t you say?”
There was a nervous stir among the other men, and the one addressed, a stocky fellow with shifty eyes, leaned forward anxiously. “They are Aes Sedai, Adden.” She recognized that voice; the man who had made the coarse suggestions. “They must be, Adden. The rings prove it, I tell you!” Adden picked up something from the table, a small circle that glinted gold in the lamplight.
Egwene gasped and felt at her fingers. They took my ring!
“I do no like it,” muttered the lanky man with the missing ear. “Aes Sedai. Any one of them could kill us all. Fortune prick me!  What if one of them do wake before he does come?”
“They’ll not wake for hours.”  “My granny taught me of that stuff we fed them. They’ll sleep till sunrise, and he’ll come long afore then.”
 Whatever it was, your granny lied to you. She should have strangled you in your cradle!  She crawled to Nynaeve.
As near as she could tell, Nynaeve seemed to be sleeping, so she began with the simple expedient of shaking her. To her surprise, Nynaeve’s eyes shot open.
“Wha—?”
She got a hand over Nynaeve’s mouth in time to stop the word. “We are being held prisoner,” she whispered. “There are a dozen men on the other side of that wall, and more outside. A great many more. They gave us something to make us sleep, but it wasn’t very successful. Do you remember, yet?”
Nynaeve pulled Egwene’s hand aside. “I remember.” Her voice was soft and grim. She grimaced and twisted her mouth, then suddenly barked a nearly silent laugh. “Sleepwell root. The fools gave us sleepwell root mixed in wine. Wine near gone to vinegar, it tastes like. Quick, do you remember anything of what I taught you? What does sleepwell root do?”
“It clears headaches so you can sleep,” Egwene said just as softly. And nearly as grimly, until she heard what she was saying. “It makes you a little drowsy, but that is all.” The fat man had not listened well to what his granny told him. “All they did was help clear the pain of being hit in the head.”
“Exactly,” Nynaeve said. “And once we wake Elayne, we’ll give them a thanking they won’t forget.” She rose, only to crouch beside the golden-haired woman.
“I think I saw more than a hundred of them outside when they brought us in,” Egwene whispered to Nynaeve’s back. “I am sure you won’t mind if I use the Power as a weapon this time. And someone is apparently coming to buy us. I mean to do something to that fellow that will make him walk in the Light till the day he dies!” Nynaeve was still crouched over Elayne, but neither of them was moving. “What is the matter?”
“She is hurt badly, Egwene. I think her skull is broken, and she is barely breathing. Egwene, she is dying as surely as Dailin was.”
“Can’t you do something?” Egwene tried to remember all the flows Nynaeve had woven to Heal the Aiel woman, but she could recall no more than every third thread. “You have to!”
“They took my herbs,” Nynaeve muttered fiercely, her voice trembling. “I can’t! Not without the herbs!” Egwene was shocked to realize Nynaeve was on the point of tears. “Burn them all, I can’t do it without—!” Suddenly she seized Elayne’s shoulders as if she meant to lift the unconscious woman and shake her.  I should have left you scrubbing pots! I should have tied you up in a sack for Mat to carry to your mother!  Do you hear me? I won’t allow it!” Saidar suddenly shone around her, and Elayne’s eyes and mouth opened wide together.
Egwene got her hands over Elayne’s mouth just in time to muffle any sound, she thought, but as she touched her, the eddies of Nynaeve’s Healing caught her like a straw on the edge of a whirlpool. Cold froze her to the bone, meeting heat that seared outward as if it meant to crisp her flesh; the world vanished in a sensation of rushing, falling, flying, spinning.
When it finally ended, she was breathing hard and staring down at Elayne, who stared back over the hands she still had pressed over her woman’s mouth. The last of Egwene’s headache was gone. Even the backwash of what Nynaeve had done had apparently been enough for that. The murmur of voices from the other room was no louder; if Elayne had made any noise—or if she had—Adden and the others had not noticed.
Nynaeve was on her hands and knees, head down and shaking. “Light!” she muttered.  Oh, Light!” She peered at Elayne. “How do you feel, girl?” Egwene pulled her hands away.
“Tired,” Elayne murmured. “And hungry. Where are we? There were some men with slings . . . ”
Hastily Egwene told her what had happened. Elayne’s face began to darken a long way before she was done.
“And now,” Nynaeve added in a voice like iron, “we are going to show these louts what it means to meddle with us.” Saidar shone around her once more.
Elayne was unsteady getting to her feet, but the glow surrounded her, as well. Egwene reached out to the True Source almost gleefully.
When they looked through the cracks again, to see exactly what they had to deal with, there were three Myrddraal in the room.
Dead-black garb hanging unnaturally still, they stood by the table, and every man but Adden had moved as far from them as he could, till they all had their backs against the walls and their eyes on the dirt floor. Across the table from the Myrddraal, Adden faced those eyeless stares, but sweat made runnels in the dirt on his face.
The Fade picked up a ring from the table. Egwene saw now that it was a much heavier circle of gold than the Great Serpent rings.
Face pressed against the crack between two logs, Nynaeve gasped softly and fumbled at the neck of her dress.
“Three Aes Sedai,” the Halfman hissed, its amusement sounding like dead things powdering to dust, “and one carried this.” The ring made a heavy thud as the Myrddraal tossed it back on the table.
“They are the ones I seek,” another of them rasped. “You will be well rewarded, human.”
“We must take them by surprise,” Nynaeve said softly. “What kind of lock holds this door?”
Egwene could just see the lock on the outside of the door, an iron thing on a chain heavy enough to hold an enraged bull. “Be ready,” she said.
She thinned one flow of Earth to finer than a hair, hoping the Halfmen could not sense so small a channeling, and wove it into the iron chain, into the tiniest bits of it.
One of the Myrddraal lifted its head. Another leaned across the table toward Adden. “I itch, human. Are you sure they sleep?” Adden swallowed hard and nodded his head.
The third Myrddraal turned to stare at the door to the room where Egwene and the others crouched.
The chain fell to the floor, the Myrddraal staring at it snarled, and the outer door swung open, black-veiled death flowing in from the night.
The room erupted in screams and shouts as men clawed for their swords to fight stabbing Aiel spears. The Myrddraal drew blades blacker than their garb and fought for their lives, too. Egwene had once seen six cats all fighting each other; this was that a hundredfold. And yet in seconds, silence reigned. Or almost silence.
 Two Aiel lay still, as well, amid the jumble of overturned furniture and dead. The three Myrddraal stood back-to-back in the center of the room, black swords in their hands. One was clutching his side as if wounded, though he gave no other sign of it. Another had a long gash down its pale face; it did not bleed. Around them circled the five veiled Aiel still alive, crouching. From outside came screams and clashes of metal that said more Aiel still fought in the night, but in the room was a softer sound.
As they circled, the Aiel drummed their spears against their small hide bucklers. Thrum-thrum-THRUM-thrum . . . thrum-thrum-THRUM-thrum . . . thrum-thrum-THRUM-thrum. The Myrddraal turned with them, and their eyeless faces seemed uncertain, uneasy that the fear their gaze struck into every human heart did not seem to touch these.
“Dance with me, Shadowman,” one of the Aiel called suddenly, tauntingly. He sounded like a young man.
“Dance with me, Eyeless.” That was a woman.
“Dance with me.”
“Dance with me.”
“I think,” Nynaeve said, straightening, “that it is time.” She threw open the door, and the three women wrapped in the glow of saidar stepped out.
It seemed as though, for the Myrddraal, the Aiel had ceased to exist, and for the Aiel, the Myrddraal. The Aiel stared at Egwene and the others above their veils as if not quite sure what they were seeing; she heard one of the women gasp loudly. The Myrddraal’s eyeless stare was different. Egwene could almost feel the Halfmen’s knowledge of their own deaths in it; Halfmen knew women embracing the True Source when they saw them. She was sure she could feel a desire for her death, too, if theirs could buy hers, and an even stronger desire to strip the soul out of her flesh and make both playthings for the Shadow, a desire to . . .
She had just stepped into the room, yet it seemed she had been meeting that stare for hours. “I’ll take no more of this,” she growled, and unleashed a flow of Fire.
Flames burst out of all three Myrddraal, sprouting in every direction, and they shrieked like splintered bones jamming a meatgrinder. Yet she had forgotten she was not alone, that Elayne and Nynaeve were with her. Even as the flames consumed the Halfmen, the very air seemed suddenly to push them together in midair, crushing them into a ball of fire and blackness that grew smaller and smaller. Their screams dug at Egwene’s spine, and something shot out from Nynaeve’s hands—a thin bar of white light that made noonday sun seem dark, a bar of fire that made molten metal seem cold, connecting her hands to the Myrddraal. And they ceased to exist as if they had never been. Nynaeve gave a startled jump, and the glow around her vanished.
“What . . . what was that?” Elayne asked.
Nynaeve shook her head; she looked as stunned as Elayne sounded. “I don’t know. I . . . I was so angry, so afraid, at what they wanted to . . . I do not know what it was.”
Balefire, Egwene thought. She did not know how she knew, but she was certain of it. Reluctantly, she made herself release saidar; made it release her. She did not know which was harder. And I did not see a thing of what she did!
The Aiel unveiled themselves, then. A trifle hastily, Egwene thought, as if to tell her and the other two they were no longer ready to fight. Three of the Aiel were male, one an older man with more than touches of gray in his dark red hair. They were tall, these Aielmen, and young or old, they had that calm sureness in their eyes, that dangerous grace of motion Egwene associated with Warders; death rode on their shoulders, and they knew it was there and were not afraid. One of the women was Aviendha. The screams and shouts outside were dying away.
Nynaeve started toward the fallen Aiel.
“There is no need, Aes Sedai,” the older man said. “They took Shadowman steel.”
Nynaeve still bent to check each, pulling their veils away so she could peel back eyelids and feel throats for a pulse. When she straightened from the second, her face was white. It was Dailin. “Burn you! Burn you!” It was not clear whether she meant Dailin, or the man with gray in his hair, or Aviendha, or all Aiel. “I did not Heal her so she could die like this!”
“Death comes to us all,” Aviendha began, but when Nynaeve rounded on her, she fell silent. The Aiel exchanged glances, as if not certain whether Nynaeve might do to them what had been done to the Myrddraal. It was not fear in their eyes, only awareness.
“Shadowman steel kills,” Aviendha said, “it does not wound.” The older man looked at her, a slight surprise in his eyes—Egwene decided that, like Lan, for this man that flicker of the eyelids was the equivalent of another man’s open astonishment—and Aviendha said, “They know little of some things, Rhuarc.”
“I am sorry,” Elayne said in a clear voice, “that we interrupted your . . . dance. Perhaps we should not have interfered.”
Egwene gave her a startled look, then saw what she was doing. Put them at ease, and give Nynaeve a chance to cool down. “You were handling things quite well,” she said. “Perhaps we offended by putting our noses in.”
The graying man—Rhuarc—gave a deep chuckle. “Aes Sedai, I for one am glad of . . . whatever it was you did.” For a moment he looked not entirely sure of that, but in the next he had his good temper back. He had a good smile, and a strong, square face; he was handsome, if a little old. “We could have killed them, but three Shadowmen . . .  For the young, death is an enemy they wish to try their strength against. For those of us a little older, she is an old friend, an old lover, but one we are not eager to meet again soon.”
Nynaeve seemed to relax with his speech, as if meeting an Aiel who did not seem anxious to die had leached the tension out of her. “I should thank you,” she said, “and I do. I will admit I am surprised to see you, though. Aviendha, did you expect to find us here? How?”
“I followed you.” The Aiel woman seemed unembarrassed. “To see what you would do. I saw the men take you, but I was too far back to help. I was sure you must see me if I came too close, so I stayed a hundred paces behind. By the time I saw you could not help yourselves, it was too late to try alone.”
“I am sure you did what you could,” Egwene said faintly. She was just a hundred paces behind us? Light, the brigands never saw anything.
Aviendha took her words as urging to tell more. “I knew where Corarn must be, and he knew where Dhael and Luaine were, and they knew . . . ” She paused, frowning at the older man. “I did not expect to find any clan chief, much less my own, among those who came. Who leads the Taardad Aiel, Rhuarc, with you here?”
Rhuarc shrugged as if it were of no account. “The sept chiefs will take their turns, and try to decide if they truly wish to go Rhuidean when I die. I would not have come, except that Amys and Bair and Melaine and Seana stalked me like ridgecats after a wild goat. The dreams said I must go.
Aviendha laughed as if at a great joke. “I have heard it said that a man caught between his wife and a Wise One often wishes for a dozen old enemies to fight instead. A man caught between a wife and three Wise Ones, and the wife a Wise One herself, must consider trying to slay Sightblinder.”
“The thought came to me.” He frowned down at something on the floor; three Great Serpent rings, Egwene saw, and a much heavier golden ring made for a man’s large finger. “It still does. All things must change, but I would not be a part of that change if I could set myself aside from it. Three Aes Sedai, traveling to Tear.” The other Aiel glanced at one another as if they did not want Egwene and her companions to notice.
“You spoke of dreams,” Egwene said. “Do your Wise Ones know what their dreams mean?”
“Some do. If you would know more than that, you must speak to them. Perhaps they will tell an Aes Sedai. They do not tell men, except what the dreams say we must do.” He sounded tired, suddenly. “And that is usually what we would avoid, if we could.”
He stooped to pick up the man’s ring. On it, a crane flew above a lance and crown; Egwene knew it now. She had seen it often before, dangling about Nynaeve’s neck on a leather cord. Nynaeve stepped on the other rings to snatch it out of his hand; her face was flushed, with anger and too many other emotions for Egwene to read. Rhuarc made no move to take it back, but went on in the same weary tone.
“And one of them carries a ring I have heard of as a boy. The ring of Malkieri kings. They rode with the Shienarans against the Aiel in my father’s time. They were good in the dance of the spears. But Malkier fell to the Blight. It is said only a child king survived, and he courts the death that took his land as other men court beautiful women. Truly, this is a strange thing, Aes Sedai. Of all the strange sights I thought I might see when Melaine harried me out of my own hold and over the Dragonwall, none has been so strange as this. The path you set me is one I never thought my feet would follow.”
“I set no paths for you,” Nynaeve said sharply. “All I want is to continue my journey. These men had horses. We will take three of them and be on our way.”
“In the night, Aes Sedai?” Rhuarc said. “Is your journey so urgent that you would travel these dangerous lands in the dark?”
Nynaeve struggled visibly before saying, “No.” In a firmer tone she added, “But I mean to leave with the sunrise.”
The Aiel carried the dead outside the palisade, but neither Egwene nor her companions wanted to use the filthy bed Adden had slept in. They picked up their rings and slept under the sky in their cloaks and the blankets the Aiel gave them.
When dawn pearled the sky to the east, the Aiel produced a breakfast of tough, dried meat—Egwene hesitated over that until Aviendha told her it was goat—flatbread that was almost as difficult to chew as the stringy meat, and a blue-veined white cheese that had a tart taste and was hard enough to make Elayne murmur that the Aiel must practice by chewing rocks. But the Daughter-Heir ate as much as Egwene and Nynaeve together. The Aiel turned the horses loose—they did not ride unless they had to, Aviendha explained, sounding as if she herself would as soon run on blistered feet—after choosing out the three best for Egwene and the others. They were all tall and nearly as big as warhorses, with proud necks and fierce eyes. A black stallion for Nynaeve, a roan mare for Elayne, and a gray mare for Egwene.
She chose to call the gray Mist, in the hope that a gentle name might soothe her, and indeed, Mist did seem to step lightly as they rode south, just as the sun lifted a red rim above the horizon.
The Aiel accompanied them afoot, all those who had survived the fight. Three more had died aside from the two the Myrddraal killed. They were nineteen, altogether, now. They loped along easily alongside the horses. At first, Egwene tried holding Mist to a slow walk, but the Aiel thought this very funny.
“I will race you ten miles,” Aviendha said, “and we shall see who wins, your horse or I.”
“I will race you twenty!” Rhuarc called, laughing.
Egwene thought they might actually be serious, and when she and the others let their horses walk at a quicker pace, the Aiel certainly showed no sign of falling back.
When the thatched rooftops of Jurene came in sight, Rhuarc said, “Fare you well, Aes Sedai. May you always find water and shade. Perhaps we will meet again before the change comes.” He sounded grim. As the Aiel curved away to the south, Aviendha and Chiad and Bain each raised a hand in farewell. They did not seem to be slowing down now that they no longer ran with the horses; if anything, they ran a little faster. Egwene had a suspicion they meant to maintain that pace until they reached wherever it was they were going.
“What did he mean by that?” she asked. “ ‘Perhaps we will meet again before the change’?” Elayne shook her head.
“It does not matter what he meant,” Nynaeve said. “I am just as glad they came last night, but I am glad to have them gone, too. I hope there is a ship here.”
Jurene itself was a small place, all wooden houses and none more than a single story, but the White Lion banner of Andor flew over it on a tall staff, and fifty of the Queen’s Guards held it, in red coats with long white collars beneath shining breastplates. They had been placed there, their captain said, to make a safe haven for refugees who wished to flee to Andor, but fewer such came every day. Most went to villages further downriver, now, nearer Aringill. It was a good thing the three women had come when they did, as he expected to receive orders returning his company to Andor any day. The few inhabitants of Jurene would likely go with them, leaving what remained for brigands and the Cairhienin soldiers of warring Houses.
Elayne kept her face hidden in the hood of her sturdy wool cloak, but none of the soldiers seemed to associate the girl with red-gold hair with their Daughter-Heir. Some asked her to stay; Egwene was not sure whether Elayne was pleased or shocked. She herself told the men who asked her that she had no time for them. It was nice, in an odd way, to be asked; she certainly had no wish to kiss any of these fellows, but it was pleasant to be reminded that some men, at least, thought she was as pretty as Elayne. Nynaeve slapped one man’s face. That almost made Egwene laugh, and Elayne smiled openly; Egwene thought Nynaeve had been pinched, and despite the glare on her face, she did not look entirely displeased, either.
They were not wearing their rings. It had not taken much effort on Nynaeve’s part to convince them that one place they did not want to be taken for Aes Sedai was Tear, especially if the Black Ajah was there. Egwene had hers in her pouch with the stone ter’angreal; she touched it often to remind herself they were still there. Nynaeve wore hers on the cord that held Lan’s heavy ring between her breasts.
There was a ship in Jurene, tied to the single stone dock sticking into the Erinin. Not the ship Aviendha had seen, it seemed, but still a ship. Egwene was dismayed when she saw it. Twice as wide as the Blue Crane, the Darter belied its name with a bluff bow as round as its captain.
That worthy fellow blinked at Nynaeve and scratched his ear when she asked if his vessel was fast. “Fast? I am full of fancy wood from Shienar and rugs from Kandor. What need to be fast with a cargo like that? Prices only go up. Yes, I suppose there are faster ships behind me, but they’ll not put in here. I would not have stopped myself if I hadn’t found worms in the meat. Fool notion that they’d have meat to sell in Cairhien. The Blue Crane? Aye, I saw Ellisor hung up on something upriver this morning. He’ll not get off soon, I’m thinking. That’s what a fast ship brings you.”
Nynave paid their fares—and twice as much again for the horses—with such a look on her face that neither Egwene nor Elayne spoke to her until long after the Darter had wallowed away from Jurene.


Light Position
Light X
Light Y
Light Z
Object Rotation Speed
Rotate Around X-Axis
Rotate Around Y-Axis
Rotate Around Z-Axis


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Classes in uchicago.src.sim.gui used by anl.repast.gis.display | |
|---|---|
| MediaProducer
Interface for repast objects that can produce images or movies. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.asynchAgents | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.enn | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.genetic | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.gisModel | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.heatBugs | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.hexabugs | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.hypercycles | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableEdge
Edges that wish to be drawn must implement this interface. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.jain | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableEdge
Edges that wish to be drawn must implement this interface. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.jiggle | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableEdge
Edges that wish to be drawn must implement this interface. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NetworkDrawable
|
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.jinGirNew | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableEdge
Edges that wish to be drawn must implement this interface. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.life | |
|---|---|
| Displayable
Interface for objects that can be displayed on a DisplaySurface. |
|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| Probeable
Interface for Displays that can be probed. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
|
| ViewEvent
A semantic event that indicates what kind of display event occured. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.mousetrap | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.neural | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.neuralfromfile | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.rabbitPopulation | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| Named
Interface for Named objects. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
| Classes in uchicago.src.sim.gui used by uchicago.src.repastdemos.sugarscape | |
|---|---|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
| Classes in uchicago.src.sim.gui used by uchicago.src.sim.analysis | |
|---|---|
| MediaProducer
Interface for repast objects that can produce images or movies. |
| Classes in uchicago.src.sim.gui used by uchicago.src.sim.analysis.plot | |
|---|---|
| MediaProducer
Interface for repast objects that can produce images or movies. |
|
| MovieMaker
Takes DisplaySurface images and makes movies out of them. |
| Classes in uchicago.src.sim.gui used by uchicago.src.sim.engine | |
|---|---|
| DisplaySurface
Handles the drawing of Displayables and the probing of probeables. |
|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| MediaProducer
Interface for repast objects that can produce images or movies. |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| RepastConsole
|
| Classes in uchicago.src.sim.gui used by uchicago.src.sim.gui | |
|---|---|
| AbstractGraphLayout
Abstract implementation of the GraphLayout interface. |
|
| ColorMap
A customizable map of java.awt.Color(s) to Integers. |
|
| Display
Abstract class upon which custom displays can be built. |
|
| Display2D
Base class for all discrete 2D displays. |
|
| Displayable
Interface for objects that can be displayed on a DisplaySurface. |
|
| DisplaySurface
Handles the drawing of Displayables and the probing of probeables. |
|
| DisplaySurface.DisplayableOrder
|
|
| Drawable
Interface for those objects in 2D spaces that wish to be drawn on a DisplaySurface by a Displayable. |
|
| DrawableItem
Abstract class for objects inhabiting non-discrete spaces and that wish to be drawn by a Display. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| GraphLayout
An Interface for laying out graphs (ie networks of nodes and edges). |
|
| HexaDisplay2D
Base class for two dimensional displays of hexagonal spaces. |
|
| LayoutWithDisplay
|
|
| Legend
|
|
| LegendIcon
|
|
| MediaProducer
Interface for repast objects that can produce images or movies. |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| MovieMaker
Takes DisplaySurface images and makes movies out of them. |
|
| NetworkDrawable
|
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| Object2DDisplay
Displays Discrete2DSpaces and the objects contained within them. |
|
| OvalItem
An oval shaped DrawableItem. |
|
| Painter
Abstract class for local and remote painting objects that do the actual work of getting Displayables to paint themselves. |
|
| Probeable
Interface for Displays that can be probed. |
|
| RectItem
A rectangular shaped DrawableItem. |
|
| RoundRectItem
A rounded rectangular shaped DrawableItem. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
|
| TextDisplay.Box
|
|
| ViewEvent
A semantic event that indicates what kind of display event occured. |
|
| Zoomable
|
| Classes in uchicago.src.sim.gui used by uchicago.src.sim.network | |
|---|---|
| Drawable2DGridNode
Interface for a drawable 2 dimensional node that occupies a cell in a grid. |
|
| DrawableEdge
Edges that wish to be drawn must implement this interface. |
|
| DrawableNonGridNode
Interface for a drawable 2 dimensional "node." |
|
| Moveable
Interface for those objects that can be dragged with the mouse on the display. |
|
| NetworkDrawable
|
|
| NonGridDrawable
Objects that are drawn in non-grid displays. |
|
| SimGraphics
A Wrapper around java.awt.Graphics2D. |
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


| 1 | /* | |
| 2 | * Licensed to the Apache Software Foundation (ASF) under one or more | |
| 3 | * contributor license agreements. See the NOTICE file distributed with | |
| 4 | * this work for additional information regarding copyright ownership. | |
| 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| 6 | * (the "License"); you may not use this file except in compliance with | |
| 7 | * the License. You may obtain a copy of the License at | |
| 8 | * | |
| 9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 | * | |
| 11 | * Unless required by applicable law or agreed to in writing, software | |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 | * See the License for the specific language governing permissions and | |
| 15 | * limitations under the License. | |
| 16 | */ | |
| 17 | package org.apache.commons.imaging.formats.pnm; | |
| 18 | ||
| 19 | import java.awt.image.BufferedImage; | |
| 20 | import java.io.IOException; | |
| 21 | import java.io.OutputStream; | |
| 22 | import java.util.Map; | |
| 23 | ||
| 24 | import org.apache.commons.imaging.ImageWriteException; | |
| 25 | ||
| 26 | public class PbmWriter extends PnmWriter { | |
| 27 | public PbmWriter(final boolean RAWBITS) { | |
| 28 | super(RAWBITS); | |
| 29 | } | |
| 30 | ||
| 31 | @Override | |
| 32 | public void writeImage(final BufferedImage src, final OutputStream os, final Map<String,Object> params) | |
| 33 | throws ImageWriteException, IOException { | |
| 34 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(PnmConstants.PNM_PREFIX_BYTE); |
| 35 |
2
1. writeImage : negated conditional → NO_COVERAGE 2. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(RAWBITS ? PnmConstants.PBM_RAW_CODE : PnmConstants.PBM_TEXT_CODE); |
| 36 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(PnmConstants.PNM_SEPARATOR); |
| 37 | ||
| 38 | final int width = src.getWidth(); | |
| 39 | final int height = src.getHeight(); | |
| 40 | ||
| 41 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(Integer.toString(width).getBytes("US-ASCII")); |
| 42 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(PnmConstants.PNM_SEPARATOR); |
| 43 | ||
| 44 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(Integer.toString(height).getBytes("US-ASCII")); |
| 45 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(PnmConstants.PNM_NEWLINE); |
| 46 | ||
| 47 | int bitcache = 0; | |
| 48 | int bits_in_cache = 0; | |
| 49 | ||
| 50 |
3
1. writeImage : changed conditional boundary → NO_COVERAGE 2. writeImage : Changed increment from 1 to -1 → NO_COVERAGE 3. writeImage : negated conditional → NO_COVERAGE |
for (int y = 0; y < height; y++) { |
| 51 |
3
1. writeImage : changed conditional boundary → NO_COVERAGE 2. writeImage : Changed increment from 1 to -1 → NO_COVERAGE 3. writeImage : negated conditional → NO_COVERAGE |
for (int x = 0; x < width; x++) { |
| 52 | final int argb = src.getRGB(x, y); | |
| 53 |
2
1. writeImage : Replaced Shift Right with Shift Left → NO_COVERAGE 2. writeImage : Replaced bitwise AND with OR → NO_COVERAGE |
final int red = 0xff & (argb >> 16); |
| 54 |
2
1. writeImage : Replaced Shift Right with Shift Left → NO_COVERAGE 2. writeImage : Replaced bitwise AND with OR → NO_COVERAGE |
final int green = 0xff & (argb >> 8); |
| 55 |
2
1. writeImage : Replaced Shift Right with Shift Left → NO_COVERAGE 2. writeImage : Replaced bitwise AND with OR → NO_COVERAGE |
final int blue = 0xff & (argb >> 0); |
| 56 |
3
1. writeImage : Replaced integer addition with subtraction → NO_COVERAGE 2. writeImage : Replaced integer addition with subtraction → NO_COVERAGE 3. writeImage : Replaced integer division with multiplication → NO_COVERAGE |
int sample = (red + green + blue) / 3; |
| 57 |
2
1. writeImage : changed conditional boundary → NO_COVERAGE 2. writeImage : negated conditional → NO_COVERAGE |
if (sample > 127) { |
| 58 | sample = 0; | |
| 59 | } else { | |
| 60 | sample = 1; | |
| 61 | } | |
| 62 | ||
| 63 |
1
1. writeImage : negated conditional → NO_COVERAGE |
if (RAWBITS) { |
| 64 |
3
1. writeImage : Replaced Shift Left with Shift Right → NO_COVERAGE 2. writeImage : Replaced bitwise AND with OR → NO_COVERAGE 3. writeImage : Replaced bitwise OR with AND → NO_COVERAGE |
bitcache = (bitcache << 1) | (0x1 & sample); |
| 65 |
1
1. writeImage : Changed increment from 1 to -1 → NO_COVERAGE |
bits_in_cache++; |
| 66 | ||
| 67 |
2
1. writeImage : changed conditional boundary → NO_COVERAGE 2. writeImage : negated conditional → NO_COVERAGE |
if (bits_in_cache >= 8) { |
| 68 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write((byte) bitcache); |
| 69 | bitcache = 0; | |
| 70 | bits_in_cache = 0; | |
| 71 | } | |
| 72 | } else { | |
| 73 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(Integer.toString(sample).getBytes("US-ASCII")); // max |
| 74 | // component | |
| 75 | // value | |
| 76 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write(PnmConstants.PNM_SEPARATOR); |
| 77 | } | |
| 78 | } | |
| 79 | ||
| 80 |
3
1. writeImage : changed conditional boundary → NO_COVERAGE 2. writeImage : negated conditional → NO_COVERAGE 3. writeImage : negated conditional → NO_COVERAGE |
if ((RAWBITS) && (bits_in_cache > 0)) { |
| 81 |
2
1. writeImage : Replaced integer subtraction with addition → NO_COVERAGE 2. writeImage : Replaced Shift Left with Shift Right → NO_COVERAGE |
bitcache = bitcache << (8 - bits_in_cache); |
| 82 |
1
1. writeImage : removed call to java/io/OutputStream::write → NO_COVERAGE |
os.write((byte) bitcache); |
| 83 | bitcache = 0; | |
| 84 | bits_in_cache = 0; | |
| 85 | } | |
| 86 | } | |
| 87 | } | |
| 88 | } | |
Mutations | ||
| 34 |
1.1 |
|
| 35 |
1.1 2.2 |
|
| 36 |
1.1 |
|
| 41 |
1.1 |
|
| 42 |
1.1 |
|
| 44 |
1.1 |
|
| 45 |
1.1 |
|
| 50 |
1.1 2.2 3.3 |
|
| 51 |
1.1 2.2 3.3 |
|
| 53 |
1.1 2.2 |
|
| 54 |
1.1 2.2 |
|
| 55 |
1.1 2.2 |
|
| 56 |
1.1 2.2 3.3 |
|
| 57 |
1.1 2.2 |
|
| 63 |
1.1 |
|
| 64 |
1.1 2.2 3.3 |
|
| 65 |
1.1 |
|
| 67 |
1.1 2.2 |
|
| 68 |
1.1 |
|
| 73 |
1.1 |
|
| 76 |
1.1 |
|
| 80 |
1.1 2.2 3.3 |
|
| 81 |
1.1 2.2 |
|
| 82 |
1.1 |


Input (hover and click on the black/pink rectangle):
All five canvases below should show the following image:


Moesha Bodoung spotted in Dubai chilling with Wizkid
by Nana YawGhanaian actress and Instagram model Moesha Boduong is really enjoying her stay in Dubai as she has been spotted in a new video chilling with Nigerian superstar, Wizkid.
The actress who loves to share photos and videos of herself shared her experience at the One Africa Music Fest in Dubai on her Instagram page where she the video of herself and the Nigerian music superstar.
Wizkid is in Dubai for One Africa Music Fest 2019. The One Africa Music Fest is considered one of the continents biggest music event with this year’s event bringing together numerous entertainers across the world.
Moesha is also seen in other videos enjoying a private party with Wizkid, Tiwa Savage and a few other people.
See the video below:


We're sorry but iview-admin doesn't work properly without JavaScript enabled. Please enable it to continue.


Tasks
Make a function
factorial
that calculates the factorial value of a given parameter n.
Implement the function
factorial
with an recursive approach.
Use memoization (caching).
5! = 5 x 4 x 3 x 2 x 1 = 120


At Wiznu for Hair, we guarantee our clients the very best service every time, we are not just about hair we pride ourselves on providing outstanding customer service every time. At Wiznu for Hair we know that a clients hair is their signature, they must feel great about it everyday and feel good wearing it!! The success of our business has always been based in attention to detail, quality and caring about the needs of our clients.


tab-items
[autoResponsive]="false"
. This will auto apply certain sizes for breakpoints:
subtitleTemplate
for custom html content.
By default, Dynamic Dage component automatically calculates amount of free space it can take, and recalculates it on window resize.
If you plan on using Dynamic Page component inside container with dynamic content height (e.g. some elements
inside container can appear after Dynamic Page component has been initiated), you need to apply
fd-dynamic-page-wrapper
directive to that container in order for Dynamic Page component to listen
container's size changes instead of window size changes.


Chapter 2 Unix
Unix is very likely the most fundamental skillset we can develop for bioinformatics (and much more than bioinformatics). Many of the most common and powerful bioinformatics approaches happen in this text-based environment, and having a solid foundation here can make everything we’re trying to learn and do much easier. This is a short introductory tutorial to help us get from being completely new to Unix up to being friendly with it 🙂
2.1 What is Unix/Linux?
UNIX is a computer operating system. It was first developed in 1969 at Bell Labs. Unix is written in the programming language C
.
Unix is proprietary software, whereas Linux is basically free and open-source Unix.
The Linux Operating System is highly flexible, free, open-source (like R) and uses very little RAM to run (Unlike Windows OS) - as such you find most supercomputers run on Linux. Operationally Linux is almost identical to Unix, and so we often refer to it under the umbrella term of “unix-Like” systems.
2.1.1 Some terms
Here are some terms worth knowing, don’t worry about memorising them, it can just be useful to have these to refer to in the future.
| Term | What it is |
|---|---|
| shell | what we use to talk to the computer; anything where you are pointing and clicking with a mouse is a Graphical User Interface (GUI) shell; something with text only is a Command Line Interface (CLI) shell |
| command line | a text-based environment capable of taking input and providing output |
| Terminal | A program that runs a shell |
| Unix | a family of operating systems (we also use the term “Unix-like” because one of the most popular operating systems derived from Unix is specifically named as not being Unix) |
| Linux | a “Unix-like” OS |
| bash | the most common programming language used at a Unix command-line |
| flag | a way to set options for a function, a specific type of argument usually preceded by a - |
Note
You should be very familiar with using a GUI (RStudio), but remember we have spent a lot of time working with files and directories using the the command line (CLI) in R. This is useful practice, because most supercomputers lack a GUI, you must work entirely using the command line.
2.2 Why Learn Unix?
Most sequencing data files are large, and require a lot of RAM to process. As a result most of the work Bioinformaticians do is not hosted on their own computers, instead they “remote-connect” to high performance supercomputers or cluster computers. Almost all of these high performance computers use “Unix-like” operatings systems, the most common of which is Linux.
As stated above Linux is free (so no expensive licenses), open-source so lots of developers, its also well known for being stable, secure, reliable and efficient.
You already have some experience with using a Linux OS - every time you log into RStudio Cloud you are connecting to a supercomputer that runs on Linux. Normally we do not interact directly with the OS, instead we use R and RStudio directly.
But when you click on the RStudio Terminal it provides direct access to a command-line where we can execute commands and functions directly in Linux.
This allows us to start using programs other than R, and potentially use multiple programs & programming languages to work together.
Note
This series of practicals is designed for you to have a first introduction to Bioinformatics, it’s about exposure, not memorising or mastering anything. Don’t worry about the details!
2.3 Getting started
Before we get started we need a terminal to work in.
Open the Bioinformatics RStudio Cloud Project in the 5023Y workspace
Click on the
Terminal
tab next toConsole
in the bottom-left pane of the RStudio GUI, this opens a command-line Shell
This is our “command line” where we will be typing all of our commands. We type our commands in
bash
The $ is where you start typing from, left of this it tells you what folder you are currently in (
working directory
)If you need to, you can exit the Terminal and start a new session easily with options in RStudio
2.4 A few foundational rules
Just like in R spaces are special, spaces break things apart, as a rule it is therefore better to have functions and file names with dashes (-) or underscores (_) - e.g. “draft_v3.txt” is preferred to “draft v3.txt.”
The general syntax on the command line is:
command argument
. Again this is very similar to R except we don’t use brackets e.g. in R we are used tocommand(argument)
Arguments can be optional e.g. if their is a default argument you may not have to write anything. Some functions require that arguments are specified. Again this is just like R.
2.5 Let’s get started
We will perform a very simple function and get a flavour of the similarities and differences to working in R
.
date
is a command that prints out the date and time. Copy and paste this command into your terminal
date
This prints out the date/time in UTC
More information on using the date function (here)[https://www.geeksforgeeks.org/date-command-linux-examples/]
We can also ask for the output for a particular timezone using the TZ
function and date
TZ=Europe/London date
Or we can ask the computer what the date will be next Tuesday…
date --date="next tue"
2.5.1 Downloading data
We will start by typing in an instruction to download data from an online data repository, unpack the contents and inspect it:
curl is a command line tool for transferring data to and from the server here we will use this to download data from an online repository.
tar will unpack the data from a compressed file format
cd change the directory so we land in the new folder we have made
curl -L -o unix_intro.tar.gz https://ndownloader.figshare.com/files/15573746
tar -xzvf unix_intro.tar.gz && rm unix_intro.tar.gz
cd unix_intro
Check each command line has run, in the example above you might find that the first two lines run, to download and unpack data, while the last line to change directory doesn’t run until you hit enter
2.5.2 More functions
Unlike date, most commands require arguments and won’t work without them. head is a command that prints the first lines of a file, so it requires us to provide the file we want it to act on:
head example.txt
Here “example.txt” is the required argument, and in this case it is also what’s known as a positional argument. Whether things need to be provided as positional arguments or not depends on how the command or program we are using was written.
Sometimes we need to specify the input file by putting something in front of it (e.g. some commands will use the -i flag, but it’s often other things as well).
Q. What’s in the text file? - Click here for Answer
Pretty boring, each line contains the text “This is line” followed by the line number e.g.
- This is line 1
- This is line 2
etc.There are also optional arguments for the head command. The default for head is to print the first 10 lines of a file. We can change that by specifying the -n flag, followed by how many lines we want:
head -n 5 example.txt
How would we know we needed the -n flag for that? There are a few ways to find out. Many standard Unix commands and other programs will have built-in help menus that we can access by providing –help as the only argument:
head --help
Again this is very similar to the logic in which R commands are strucutred e.g. ??ggplot()
The synatx is similar even if the specific icons or arguments are different.
Remember just like with R, one of your best friends is Google! As you get familiar with any language or OS we might remember a few flags or specific options, but searching for options and details when needed is definitely the norm!
2.6 Unix File Structure
There are two special locations in all Unix-based systems: the “root” location and the current user’s “home” location. “Root” is where the address system of the computer starts; “home” is usally where the current user’s location starts.
Just to be awkward RStudio Cloud actually has us working in a different location “Cloud,” which is underneath Root but separate to home which would be in the “Users” folder.
We tell the command line where files and directories are located by providing their address, their “path.” If we use the pwd command (for print working directory), we can find out what the path is for the directory we are sitting in.
pwd
And if we use the ls command (for list), we can see what directories and files are in the current directory we are sitting in.
ls
Note
Why is it important to know this? Usually when you are working on a Unix-like environment there is no GUI (nice-click and point interface), all commands have to be submitted through the terminal. So you would have to get used to navigating directories with typed commands, and it’s useful to know what the standard hierarchy is.
2.7 Absolute vs relative file paths
You should be used to these concepts from your work with R projects.
There are two ways to specify the path (address) of the file we want to do something to:
An absolute path is an address that starts from an explicitly specified location: usually the “root”
/
or the “home”~/
location. (Side note, because we also may see or hear the term, the “full path,” is usually the absolute path that starts from the “root” /.)A relative path is an address that starts from wherever we are currently sitting (the working directory). For example, let’s look again at the head command we ran above:
head example.txt
What we are actually doing here is using a relative path to specify where the “example.txt” file is located. This is because the command line automatically looks in the current working directory if we don’t specify anything else about its location.
We can also run the same command on the same file using an absolute path - note Rstudio cloud has a slightly unique set-up in that we start from a folder designated cloud:
head /cloud/project/unix_intro/example.txt
The previous two commands both point to the same file right now. But the first way, head example.txt, will only work if we are entering it while “sitting” in the directory that holds that file, while the second way will work no matter where we happen to be in the computer.
It is important to always think about where we are in the computer when working at the command line. One of the most common errors/easiest mistakes to make is trying to do something to a file that isn’t where we think it is. Let’s run head on the “example.txt” file again, and then let’s try it on another file: “notes.txt”:
head example.txt
head notes.txt
Here the head command works fine on “example.txt,” but we get an error message when we call it on “notes.txt” telling us no such file or directory. If we run the ls command to list the contents of the current working directory, we can see the computer is absolutely right – spoiler alert: it usually is – and there is no file here named “notes.txt.”
The ls command by default operates on the current working directory if we don’t specify any location, but we can tell it to list the contents of a different directory by providing it as a positional argument:
ls
ls experiment
We can see the file we were looking for is located in the subdirectory called “experiment.” Here is how we can run head on “notes.txt” by specifying an accurate relative path to that file:
head experiment/notes.txt
2.8 Moving around
We can also move into the directory containing the file we want to work with by using the cd
command (change directory). This command takes a positional argument that is the path (address) of the directory we want to change into. This can be a relative path or an absolute path. Here we’ll use the relative path of the subdirectory, “experiment,” to change into it
cd experiment/
pwd
ls
head notes.txt
Great. But now how do we get back “up” to the directory above us? One way would be to provide an absolute path, like cd /cloud/project/unix_intro
, but there is also a handy shortcut. ..
which are special characters that act as a relative path specifying “up” one level – one directory – from wherever we currently are.
So we can provide that as the positional argument to cd to get back to where we started:
cd ..
Moving around the computer like this might feel a bit cumbersome and frustrating at first, but after spending a little time with it, you will get used to it, and it starts to feel more natural.
Note
One way to speed things up is to start using tab to perform tab-completion often this will auto-complete file names! Press tab twice quickly and it will print all possible combinations.
2.9 Summary
While maybe not all that exciting, these things really are the foundation needed to start utilizing the command line – which then gives us the capability to use lots of tools that only work at a command line, manipulate large files rapidly, access and work with remote computers, and more! These are the fundamental tools that every scientist needs to work with big data.
2.9.1 Terms
| Term | What it is |
|---|---|
| path | the address system the computer uses to keep track of files and directories |
| root | where the address system of the computer starts, / |
| home | where the current user’s location starts, ~/ |
| absolute path | an address that starts from a specified location, i.e. root, or home |
| relative path | an address that starts from wherever we are |
| tab-completion | our best friend |
2.9.2 Commands
| Command | What it is |
|---|---|
| date | prints out information about the current date and time |
| head | prints out the first lines of a file |
| pwd | prints out where we are in the computer (print working directory) |
| ls | lists contents of a directory (list) |
| cd | change directories |
2.9.3 Special characters
| Command | What it is |
|---|---|
| Characters | Meaning |
| / | the computer’s root location |
| ~/ | the user’s home location |
| ../ | specifies a directory one level “above” the current working directory |
2.10 Summary
You won’t get used to operating in bash, or moving around directories using just the command line in a single session. So if you think you are interested in developing your bioinformatic skills, spend some time practising.
Here is a link to a couple of extended tutorials you can bookmark if you want to explore this further:
https://datacarpentry.org/shell-genomics/01-introduction/index.html
2.11 Stretch yourself - optional extras to try a couple of other skills
2.11.1 Creation
I want to create a new directory to store some code files I’m going to write later, so I’ll use mkdir
to create a new directory called Code:
Check you are in the unix_intro
folder - Click here for Answer
pwd
Make a new directory called Code - Click here for Answer
mkdir Code
Check this folder has been created using a list function
ls
Note that I used a relative file path to create the Code directory - but I could have also specified an absolute filepath to generate that folder in whatever location I want.
There are a few ways to make new files on the command line. The simplest is to generate a blank file with the touch
command followed by the path (relative or absolute) to the file you want to create
Make a new file called data-science-class.txt - Click here for Answer
touch data-science-class.txt
ls -l
Note here I could just use ls to list all files and folders in a directory, but if i set the flag -l
then it will produce a long list of files.
If the entry in the first column is a d
, then the row in the table corresponds to a directory, otherwise the information in the row corresponds to a file.
The string of characters following the d
in the case of a directory or following the first -
in the case of a file represent the permissions for that file or directory - I won’t cover that here - but some of the links I provide go into more detail.


The Shepherds
Difficult
Develop your own herd:
• Reach 50 animal population
• Build 4 stables
Your village hunted down nearby animals for years, but their populations have now dwindled drastically, now you need to domesticate and protect your own herd.
Reach 50 animal population
Build 4 stables
Well done
You will now be able to survive in this environment.


--- layout: post title: "Vagrant: hello box, thank you for coming" date: 2014-08-13 00:35:34 categories: vagrant ---
Vagrant is a virtual machines management tool that allows us to easily create, run, configure and share customized virtual systems. The main goal of Vagrant is to provide a centralized way to share preconfigured virtual machines for software developers. In development teams, all members must share not only and up-to-date project source, but also the same system configuration: database management systems, web servers, application servers, IDEs, development kits,... It is almost impossible to keep them identical in each station, not to mention the same specific versions of each program needed. Another issue that comes to mind if you have ever suffered this is when your system crashed or you simply upgrade your hardware, or some IDE requires the latest operative system from Redmond: you will start again from scratch installing all the components you need to have your environment ready to work. This is a sort of myth of sisyphus adapted to coders.
Virtualization comes to the rescue! but this is not just about sharing a common virtual machine among developers. Vagrant wraps the virtualization system, and so we are not necessarily tied to any of them. Vagrant supports Virtual Box (easily available), VMWare and even Amazon EC2, is easy to get into it.
In two easy steps we init a vagrant machine (a default 64bit box) and then we just boot it with vagrant up. The first time the box must be downloaded
d:\vm\vagrant init hashicorp/precise32 ... d:\vm\vagrant up
The first command will create a Vagrant configuration file, nice and self-documented. This is how it looks like in a windows host:
Ok, we get a basic machine but what happens with the configuration. Vagrant can take advantadge of powerful configuration tools suchs as chef and puppet. These two deserve not a post but one book each. In a nutshell, this kind of software automates machine configuration; for programming environments there are already tools that using declarative description you get code. In the same way, sysadmins now are able to deploy several servers perfectly configured in no time, just writing configuration (and shareable) files. That easy.
Even developers communicate and share (code), but mainly between them, though. And so for development boxes. Officialy available we have the Vagrant Cloud, were we can grab popular boxes with some rating information included. It's very easy to join the cloud and create your own boxes.  Other reference site could be Vagrant Box, with many different linux flavors for you to pick. There are, also, other propietary boxes available.
Maybe in a software development company or department you just the same kind of environment all the time. But Vagrant could be a really great tool to use at school. Depending on the subjects students have to switch their environments and they will drive you crazy because two of them don't have the latest JVM or the usual suspects don't know even how to switch off their windows8. You could prepare one Vagrant box, perfectly configured for each subject, even for each specific unit of the same subject.  Instead of stuffing one single machine with all the software you need, a good use of Vagrant could avoid conflicts and guarantee that all students are using exactly the same environment. As easy as pie.
It is not unusual that you try to learn something new and that leads you to learn many other things. Here I have written a bunch of names to be aware of, and I hope that this post helps as a reminder for the near future. Greetz 4 u.


--- layout: post authors: ["Mike Jackson"] title: "Software Carpentry Returns to Edinburgh" date: 2014-12-08 time: "10:30:00" tags: ["Workshops", "University of Edinburgh"] ---
Last week, EPCC's ARCHER training team ran another Software Carpentry workshop here in Edinburgh, on 3rd and 4th of December. The workshop provided attendees with an introduction to version control and Git, building programs with Python, automating tasks with Make, and how (and how much) to test programs. These were set within the context of best practices for scientific computing.
My colleagues Mario Antonioletti, Alistair Grant and Arno Proeme joined me as co-instructors. EPCC's Emmanouil Farsarakis, and Leighton Pritchard and Peter Cock from The James Hutton Institute in Dundee were helpers. All had attended the Software Carpentry Instructor Training at TGAC back in October.
We had 38 attendees, mostly from Edinburgh and Heriot-Watt, including a group from the EPSRC Centre for Doctoral Training in Condensed Matter Physics. Other attendees came from institutions across the UK including Belfast, Birmingham, Bristol, Dublin, Durham Leeds, Oxford, St. Andrews and Strathclyde, the Royal College of Surgeons and the Roslin Institute.
There were a number of software difficulties we encountered:
We gathered feedback (via sticky notes) after each session and you can view these as a MarkDown file in the workshop's GitHub repository. We also collected information using a post-workshop questionnaire, and a selection of the attendees' comments is as follows:
| Good points | Bad points |
|---|---|
| The range of topics was well thought out and very useful for my research. | When tasks were given to be completed, there was no extra material to be covered if you completed the task quickly. It would also be useful to have these extra examples to work on after the course. |
| Version control is really important, good idea to use [it] and for documents too. | There was a lot of dead space in the program coffee breaks and lunch were too long. |
| IPython seems super useful and I didn't know about it before. | |
| Previously thought that make was used only for compiling Fortran codes. | I think some areas needed more exercises for us to do to ensure we knew what was going on. |
| I didn't know there were ways to test code without putting annoying print statements all over the place and messing up structure. | Testing used programs that I didn't really understand so found it hard to know exactly what the tests were meant to do. |
| Great working with other people to solve the problems posed. | I would have appreciated more explanation of the purpose of the example code, since I often found myself mindlessly copying it down without being certain what was going on |
| Interactive! Makes it easier / more fun to learn. | 2-days time span is short...didn't get time to practice what I learnt. |
| Refreshing ideas about programming which is particularly useful for the majority of people, particularly myself, who have no formal programming training and, thus, are riddled with terrible habits in coding. | High diversity lead to some people struggling and some waiting around |
Our workshop was in collaboration with EPCC's PRACE Advanced Training Centre (PATC), and Software Carpentry, a Mozilla Science Lab initiative. ARCHER's training team plans more Software Carpentry workshops throughout 2015 - keep your eyes on ARCHER's upcoming courses for more information.


Data Structures | |
| struct | getdns_eventloop_event |
| struct | getdns_eventloop |
| struct | getdns_eventloop_vmt |
Typedefs | |
| typedef void(* | getdns_eventloop_callback) (void *userarg) |
| typedef struct getdns_eventloop_event | getdns_eventloop_event |
| typedef struct getdns_eventloop_vmt | getdns_eventloop_vmt |
| typedef struct getdns_eventloop | getdns_eventloop |
| typedef void(* | getdns_eventloop_noargs) (getdns_eventloop *loop) |
| typedef getdns_return_t(* | getdns_eventloop_schedule) (getdns_eventloop *loop, int fd, uint64_t timeout, getdns_eventloop_event *ev) |
| typedef getdns_return_t(* | getdns_eventloop_clear) (getdns_eventloop *loop, getdns_eventloop_event *ev) |
| typedef void(* | getdns_eventloop_run_once) (getdns_eventloop *loop, int blocking) |
Functions | |
| getdns_return_t | getdns_extension_set_libev_loop (struct getdns_context *context, struct ev_loop *ev_loop) |
| getdns_return_t | getdns_extension_set_libevent_base (struct getdns_context *context, struct event_base *this_event_base) |
| getdns_return_t | getdns_extension_set_libuv_loop (struct getdns_context *context, struct uv_loop_s *uv_loop) |
| getdns_return_t | getdns_context_set_eventloop (getdns_context *context, getdns_eventloop *eventloop) |
| getdns_return_t | getdns_context_get_eventloop (getdns_context *context, getdns_eventloop **eventloop) |
| void | getdns_context_run (getdns_context *context) |
Detailed Description
Typedef Documentation
◆ getdns_eventloop_callback
| typedef void(* getdns_eventloop_callback) (void *userarg) |
The type of callback function that is used by the callbacks in an getdns_eventloop_event.
- Parameters
-
userarg This will have the value of the userarg attribute of the getdns_eventloop_event struct in which this callback was present.
Definition at line 168 of file getdns_extra.h.
◆ getdns_eventloop_event
| typedef struct getdns_eventloop_event getdns_eventloop_event |
Definition at line 171 of file getdns_extra.h.
◆ getdns_eventloop_vmt
| typedef struct getdns_eventloop_vmt getdns_eventloop_vmt |
Definition at line 213 of file getdns_extra.h.
◆ getdns_eventloop
| typedef struct getdns_eventloop getdns_eventloop |
The manifestation of the event loop abstraction layer. Event loop extension implementers should extend this with attributed needed for the underlying event loop. The current event loop extension can be obtained with the getdns_context_get_eventloop() function.
◆ getdns_eventloop_noargs
| typedef void(* getdns_eventloop_noargs) (getdns_eventloop *loop) |
The function prototype for the cleanup
and run
functions in an getdns event loop's Virtual Method Table. These methods have no (extra) arguments and return nothing.
- Parameters
-
loop The event loop to run
orcleanup
Definition at line 236 of file getdns_extra.h.
◆ getdns_eventloop_schedule
| typedef getdns_return_t(* getdns_eventloop_schedule) (getdns_eventloop *loop, int fd, uint64_t timeout, getdns_eventloop_event *ev) |
The function prototype for the schedule
function in an event loop Virtual Method Table. The getdns_eventloop_event must be provided by the caller with the callbacks and userarg therein already supplied (by the caller). This function will set the ev pointer (in the getdns_eventloop_event) to refer to the underlying (extension) event.
- Parameters
-
loop The event loop for which to register the event. fd The file descriptor for which to schedule the read_cb and/or write_cb callbacks. timeout The number of milliseconds that must pass without read and/or write event after which the timeout_cb callback is fired. ev The event with all attributes provisioned, except for the ev->ev attribute, which will be provisioned by the implementation of the schedule method.
- Returns
- GETDNS_RETURN_GOOD when successful and an error code otherwise.
Definition at line 255 of file getdns_extra.h.
◆ getdns_eventloop_clear
| typedef getdns_return_t(* getdns_eventloop_clear) (getdns_eventloop *loop, getdns_eventloop_event *ev) |
The function prototype for the clean
function in an event loop Virtual Method Table. The implementation must clear the event (which is referred to with ev->ev) in the underlying event loop and make ev->ev NULL when done. getdns will test for this value to determine if events are scheduled or not.
- Parameters
-
loop The event loop for which to event needs to be cleared. [in,out] ev The event with the ev->ev attribute referring to the underlying event. ev->ev must be set to NULL after the event was cleared.
- Returns
- GETDNS_RETURN_GOOD when successful and an error code otherwise.
Definition at line 271 of file getdns_extra.h.
◆ getdns_eventloop_run_once
| typedef void(* getdns_eventloop_run_once) (getdns_eventloop *loop, int blocking) |
The function prototype for the run_once
function in an event loop Virtual Method Table. The implementation must do a single round of firing callbacks, either blocking or not.
- Parameters
-
loop The event loop to run blocking When 0, only callbacks for file descriptors that are immediately readable or writable or timeouts that have passed will be fired. When 1, the eventloop will wait until the first callback can be fired, either because a associated file descriptor has become readable or writeable, or because a timeout time passed.
Definition at line 285 of file getdns_extra.h.
Function Documentation
◆ getdns_extension_set_libev_loop()
| getdns_return_t getdns_extension_set_libev_loop | ( | struct getdns_context * | context, |
| struct ev_loop * | ev_loop | ||
| ) |
Associate the libev ev_loop with the context, so that all asynchronous requests will schedule Input/Output with it. Synchronous requests will still use a default eventloop based on poll()
. Applications need to
and link with libgetdns_ext_ev to use this function. getdns needs to have been configured with –with-libev for this extension to be available.
- Parameters
-
context The context to configure ev_loop The libev event loop to associate with this context.
- Returns
- GETDNS_RETURN_GOOD when successful
- GETDNS_RETURN_BAD_CONTEXT when context is NULL
- GETDNS_RETURN_INVALID_PARAMETER when ev_loop is NULL
- GETDNS_RETURN_MEMORY_ERROR when memory could not be allocated
◆ getdns_extension_set_libevent_base()
| getdns_return_t getdns_extension_set_libevent_base | ( | struct getdns_context * | context, |
| struct event_base * | this_event_base | ||
| ) |
Associate the libevent event_base with the context, so that all asynchronous requests will schedule Input/Output with it. Synchronous requests will still use a default eventloop based on poll()
. Applications need to
and link with libgetdns_ext_event to use this function. getdns needs to have been configured with –with-libevent for this extension to be available.
- Parameters
-
context The context to configure this_event_base The libevent event base to associate with this context.
- Returns
- GETDNS_RETURN_GOOD when successful
- GETDNS_RETURN_BAD_CONTEXT when context is NULL
- GETDNS_RETURN_INVALID_PARAMETER when this_event_base is NULL
- GETDNS_RETURN_MEMORY_ERROR when memory could not be allocated
◆ getdns_extension_set_libuv_loop()
| getdns_return_t getdns_extension_set_libuv_loop | ( | struct getdns_context * | context, |
| struct uv_loop_s * | uv_loop | ||
| ) |
Associate the libuv uv_loop with the context, so that all asynchronous requests will schedule Input/Output with it. Synchronous requests will still use a default eventloop based on poll()
. Applications need to
and link with libgetdns_ext_uv to use this function. getdns needs to have been configured with –with-libuv for this extension to be available.
- Parameters
-
context The context to configure uv_loop The libuv event loop to associate with this context.
- Returns
- GETDNS_RETURN_GOOD when successful
- GETDNS_RETURN_BAD_CONTEXT when context is NULL
- GETDNS_RETURN_INVALID_PARAMETER when uv_loop is NULL
- GETDNS_RETURN_MEMORY_ERROR when memory could not be allocated
◆ getdns_context_set_eventloop()
| getdns_return_t getdns_context_set_eventloop | ( | getdns_context * | context, |
| getdns_eventloop * | eventloop | ||
| ) |
Configure a context to use the specified event loop abstraction extension. This function must be called with an provisioned eventloop by the event loop extension registration functions.
- See also
- getdns_context_get_eventloop
- Parameters
-
context The context to configure eventloop The event loop abstraction extension with a completely provisioned Virtual Method Table and other associated data which is opaque to the user.
- Returns
- GETDNS_RETURN_GOOD when successful
- GETDNS_RETURN_INVALID_PARAMETER when context or eventloop were NULL.
◆ getdns_context_get_eventloop()
| getdns_return_t getdns_context_get_eventloop | ( | getdns_context * | context, |
| getdns_eventloop ** | eventloop | ||
| ) |
Get the current event loop abstraction extension from the context Applications using getdns can use the event loop abstraction extension themselves directly to inherit the flexibility being immediately compatible with all the event loop systems for which there is an extension (i.e. libevent, libev and libuv).
- See also
- getdns_context_set_eventloop
- Parameters
-
[in] context The context to get the eventloop from [out] eventloop The currently active event loop abstraction extension
- Returns
- GETDNS_RETURN_GOOD when successful
- GETDNS_RETURN_INVALID_PARAMETER when context or evenloop were NULL
◆ getdns_context_run()
| void getdns_context_run | ( | getdns_context * | context | ) |
Run the context's event loop until nothing more to do. This is equivalend to:
- Parameters
-
context The context which event loop to run.


A Tribute to Artists in a Neighborhood Losing Its Grit
In a small stand against gentrification, the nonprofit Wildflowers Institute has helped San Francisco’s gritty Tenderloin neighborhood define its cultural assets.
In a small stand against gentrification, the nonprofit Wildflowers Institute has helped San Francisco’s gritty Tenderloin neighborhood define its cultural assets.
President Obama is facing new opposition from his own party to one of his top priorities: winning the power to negotiate international trade pacts and speed them through Congress.


Listener methods.
When a GUI program is running, the user generates an event by interacting with a GUI component. The following are some ways to generate an event:
For a program to respond to an event there must be an event listener object for it. The event listener object contains listener methods for the various types of events.
A program can ignore events. For example the programs of the previous chapter ignored nearly all events. If there is no listener for an event, the event is ignored.


How brave Malin Andersson overcame grief, domestic abuse and eating disorders
EXCLUSIVE: Malin Andersson opened up on how she found the strength to overcome domestic abuse, tragic family deaths, and eating disorders
by Irishmirror.ieMalin Andersson opened up to MirrorOnline exclusively about her battle with grief, body positivity, along with some advice for women who are experiencing domestic abuse.
The former Love Island star recently spoke out and bravely posted horrifying photos of injuries she says she received at the hands of her ex boyfriend.
"It's something that isn't really spoken about", she said.
"You don't see women speaking about it or reaching out for help.
"I know first hand it can takes months or years to start to feel comfortable calling for help.
"I just hope people can see what I am doing and pluck up the courage to seek help."
Malin, 27, is no stranger to trauma, and she gave birth to her daughter Consy prematurely in January.
Consy had a heart defect and tragically died just weeks after being born.
Malin was still grieving the loss of her mum, also named Consy, who had died from cancer in November 2017.
"Like everything else I've gone through, it just takes time. It doesn't happen overnight", she said.
"Trauma is trauma".
But when asked how she was really doing now, Malin said firmly: "I'm good."
She reflected: "It's my mum's two year death anniversary in three days, and it would have been my daughter's first birthday next month. So this time a year ago, everything was fine."
She opened up about how she has changed over the last year, remaining positive even after everything.
"After going through what I've gone through, I see life completely differently. Trauma destroys you as a peson.
"I've been heartbroken. I find some days harder than others, I do struggle to get up some days. I don't see the point in life sometimes.
"But that's me being a victim. I'd rather see what I do have around me and be grateful for what I've got.
"I count my blessings every morning", she explained.
"I write down a list of what I'm grateful for, to remind myself."
Malin has recently become a huge advocate for body positivity, posting photos which showcase her real, un-airbrushed body.
"Helping others is a for of therapy to me", she said.
Post Love Island, Malin said she was using social media for "selfish things" like adverts and sponsorships, things Malin brands "fake s***e".
"Going through trauma really evolves you as a person, and I wouldn't do that bulls**t ever again.
"Life is about living and being authentic, and helping people. Even if you help just one person", she said.
Malin explained she'd overcome a life long battle with eating disorders, which only dissipated when she became pregnant.
"I've had a long struggle with eating disorders my whole life, from the age of 15 when I started beauty pageants, every day I'd wake up crying, wanting it to go away. Counting calories, weighing myself after drinking water", she said.

"My body is not built for that. My frame will never be that."
When Malin became a flight attendant, she was then weighed before every flight as the airline was so strict about the image of its cabin crew.
Then as Malin moved into TV and did Love Island, her body was once again under scrutiny as she appeared in a bikini in front of millions.

So Malin then resorted to surgery, undergoing liposuction and a breast lift. But this still didn't make her feel better.
She said the change came when she got pregnant and she had a newfound respect and love for her body and what it was doing.
"I'm carrying this beautiful little girl", she said.
Malin recently took part in a stunning lingerie campaign shot on the underground and in a cab, which she said was a very chilly experience.
She says a few years ago she would never have done it because of self-consciousness of her " cellulite and saggy boobs" but "there's no point being a fraud on social media" she said.
"It's empowering."
"Slowly fall in love with yourself and be kind to ourselves. Start the process of loving yourself. Society drums into us expectations of what you should look like.
"Be kind to yourself. It all starts within."
Malin recently visited the Bliss Sanctuary For Women in Bali for a women-only retreat to help her mind and body recover from everything she's been through, which she highly recommends.
"It's a place of healing", she said.
"We get caught up in our busy schedules and we don't take the time to look after ourselves. And that's the most important thing to do."
Winter Love Island is coming up early next year, and Malin says she still doesn't believe there is enough diversity on the show, so she hopes that will change in the future.
She added that she thought it was "oversaturated" having two series in a year.
Malin also revealed she isn't watching I'm a Celebrity, but she knows "awesome person" Jacqueline Jossa, who she hopes will do well.


I am building a character based on the Moor Stalker v2.0. I just got to lev 6 and took my first assassin level, and have found that my ranged attacks do not do a death attack. My melee attacks do. It seemed like the build assumed doing death attacks with the longbow. Did I misunderstand the build or maybe do something wrong? Thanks for any help in advance!
Also, I just joined and must say, this guild has been a god send! I like to RP my character, not build them, so it's great to have so many good builds that I can pick one that matches my RP and still will be usable PvM or PvP.
To have a chance at Ranged Death Attacking someone there are a few things that must happen: must be within 30 feet, must catch the opponent flat footed, opponent must not be in combat mode, Opponent must be susceptible to sneak attack (no undeads, etc).
that info should help.
Ah, the 30 feet thing was getting me. Thats exactly what I wanted to hear, thanks Bromium! I was afraid that it was changed in a patch or on the server.
Now I just need to test how far 30 feet is in game...
*holds right index finger away from right thumb*