[gecode-users] Gecode 3.0.0: What we will do. What do you want?
Christian Schulte
cschulte at kth.se
Wed Jun 25 19:53:10 CEST 2008
Hi,
bus errors can be found using a normal debugger. Thats not really an issue
with Gecode (well, Gecode might have some bugs but bus errors most likely
not).
As it comes to documentation, the part (b) should give you what you want.
Christian
--
Christian Schulte, www.ict.kth.se/~cschulte/
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Mauricio Toro
Sent: Wednesday, June 25, 2008 7:24 PM
To: users at gecode.org
Subject: Re: [gecode-users] Gecode 3.0.0: What we will do. What do you want?
Hello,
I am always having problems with bus error, and there is not an easy
way to debug those errors. Would it be possible to do something about it?
Also, some documentation about how to develop new propagators
should be included.
cheers,
Mauricio
2008/6/25 Javier Andrés Mena Zapata <javimena at gmail.com>:
Hi,
I think one important thing missing in Gecode is direct support to modeling
scheduling problems. There has been always said (several papers, not
Gecode) that that CP is the way to go if you want to model scheduling
problems, but when one tries to implement those ideas in Gecode the
difficulties arrives quickly, mainly because the missing of direct support
to modelling scheduling problems and because the documentation is not very
detailed when you want to model new search engines and branchings. You will
address those issues in the next versions of Gecode, so in the future it
will not be a great problem.
I'm very interested in the support of scheduling functions in Gecode, and I
would be glad to contribute an initial implementation, if you plan to
include those functions in the main line of Gecode (that's no a requirement,
but an idea).
When you say "parallel support", do you mean multi-core support? or
distributed support?.
IMHO.
Thanks for taking us into account.
On Wed, Jun 25, 2008 at 11:07 AM, Christian Schulte <cschulte at kth.se> wrote:
Dear all,
as mentioned, we are planning for Gecode 3.0.0. Before going into detail, I
would like to share with you the goals we wanted to achieve with the
previous major releases and the goals we want to achieve with 3.0 (and even
4.0).
Gecode 1.0.0 was the first version where we believed that we had arrived at
something that was reasonably complete and robust to be useful to other
users but us. The focus has been in particular on getting the basic
architecture sufficiently mature.
Gecode 2.0.0 achieved a complete set of abstractions needed to do efficient
propagation including incremental propagation. We are quite confident that
the level of completeness and maturity we reached for propagation will be
sufficient for some time to come. Subsequent releases fixed (and will fix)
lots of not-so-easy-to-catch bugs as we have been stepping up Gecode's
quality.
Gecode 3.0.0 will shift the focus away from propagation. The main focus will
be documentation and search.
In more detail, Gecode 3.0.0 will feature:
- a complete rework of branching, including randomization and support for
tie-breaking (already finished)
- abstractions for cost-based optimization (just define a cost function,
done)
- a first shot at parallel search (working really great, but integration
and legal aspects are not yet resolved)
- the first stable version of Gist as an interactive search tool (almost
done, we have made amazing progress and have
attained a level of efficiency and scalability we thought impossible)
- apart from that the usual small stuff, much of it devoted to make Gecode
easier to explain
- we might re-optimize the crucial abstractions for 64 bit rather than for
32 bit instead (should we? should we optimize both?)
The other big thing will be to deliver documentation with Gecode apart from
the extensive reference documentation it already comes with. The following
topics (as of today's understanding) will be covered:
(a) Modeling with Gecode: How to do CP models with Gecode. This will be
concerned with Gecode-specific aspects
and not be an introduction to CP.
(b) Programming Propagators: That will explain the basic issues, the
underlying architecture, but also all the programming
techniques we developed so far.
(c) Programming Branchings: Rather simple.
(d) Programming Exploration: how to construct own search engines with a
focus on how recomputation works in detail.
(e) Programming Variables: how to provide new variable implementations.
This is now really easy.
The biggest piece will be (b). Together with Gecode 3.0.0 we will definitely
release (a) and maybe a short draft of (b). (d) will not come with 3.0.0,
(c) and (e) might come. We have not yet decided whether anything but (a)
will be released as a freely available document. Depending on our academic
publications anything but (a) might be delayed.
The later versions of Gecode 3.* will gradually improve the search
capabilities, including a better LDS, abstractions for large neighborhood
search, automatic configuration of recomputation, etc...
There will be a Gecode 2.3.0 release that will change the way memory
management is done. This version will also be submitted to the MiniZinc
Challenge 2008. It might (to make our live easier) already contain parts
mentioned above as parts of 3.0.0.
The long term vision is that Gecode 4.0.0 will be something that is fully
backed up with high-quality documentation, has very advanced parallel search
facilities, and might have unique inference modules (elimination of
redundant propagators, automatic choice of consistency level, SAC, ...).
What I did not mention is that we will add new propagators (and new variable
types, thanks to Filip) if we find the time and we get the requests. But we
do hope that we will see contributions here in the hopefully not-so-far
future from our users.
Last thing, time:
- Gecode 2.3.0: end of summer
- Gecode 3.0.0: late autumn
- Gecode 4.0.0: late autumn 2009
Okay, that was long and boring. Sorry!
Now: What do you want? How can you help us? Are we missing something really
important? Is there something fundamentally wrong?
All the best
Christian on behalf of the Gecode team
--
Christian Schulte, www.ict.kth.se/~cschulte/
<http://www.ict.kth.se/%7Ecschulte/>
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
--
"El primer paso para llegar a algún sitio, es decidir no quedarse en donde
se esté"
John Piermont Morgan
Javier Andrés Mena Zapata
http://StrategicDecision.net/
+57 (2) 318 1000 ext. 2910
Cali - Colombia
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
--
Mauricio Toro Bermudez
Estudiante de Ingeniería de Sistemas
Pontificia Universidad Javeriana, Colombia
Stagiare à l'Ircam
1, place Igor-Stravinsky 75004 Paris,
France de 2008 à 2009
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20080625/55810cb2/attachment.htm>
More information about the gecode-users
mailing list


This is just a link to the actual file, a PDF: SongSheet.pdf
Some browsers die trying to open the file directly, so this is for those.


We take pride in our work, and it shows. All our bathroom and plumbing work is done to a very high standard, not just because it looks better but because it ensures there are no leaks and is easy to clean. Leaks and difficulties in cleaning are the chief cause of ongoing damage in a bathroom.
When painting, wallpapering and other decorating the final finish is dependant upon the quality of the preparation and repairs to all the surfaces before the final covering is applied. We understand this and apply it in all our decorating work.
We can replace existing internal light fittings, switches and exterior security lights that provide you with an attractive and secure environment to live in.
It's an old adage but it still holds true. We do many types of small/medium sized jobs around peoples homes to stop further damage in its tracks. If you don't keep on top of the small jobs you can face some expensive repairs down the line. We understand that and keep this at the forefront of our mind when we're working on your home. Pre-Sale Home Touchup - House Tidy up between Tenants - Shelving - Flat Pack Construction - Re-seal Bathroom/Kitchen - Re-grout Tiles - Floor, Wall and Fireplace Tiling and Grouting - Eco Improvements - Picture/Mirror Hanging - Changing Doors and Door Furniture - General Carpentry - Fit Curtain Poles - Hang Blinds - Re-Oil Hardwood Kitchen Worktops - Box-in Pipes - Repair/Replace Guttering


Crop allows you to crop the texture being used to display this Game Object. Setting a crop rectangle modifies the core texture frame. The Game Object width and height properties will be adjusted accordingly.
Cropping takes place from the top-left and can be modified in real-time either by providing an updated rectangle object to this method, or by modifying cropRect
property directly and then calling updateCrop
.
The rectangle object given to this method can be either a Phaser.Rectangle
or any other object so long as it has public x
, y
, width
, height
, right
and bottom
properties.
A reference to the rectangle is stored in cropRect
unless the copy
parameter is true
, in which case the values are duplicated to a local object.


-- Macbeth(3.4.98)
To fully understand Macbeth's situation and the events that led to Macbeth's tyranny, we ourselves must delve into the definitions of manhood that the play provides through its characters. First, we come to Macbeth's initial understanding of a man.
Macbeth's first literal definition comes when he catches sight of the ghost of Banquo. He then shouts to the ghost that he is as brave as any man, but commands the ghost to take on a shape other than that of Banquo's. He reasons that the ghosts presence makes his tremble with fear, thus making him less of a man. When the ghost retreats, he says that he has become a man again. Therefore we can summarize that Macbeth believes that men should have no fear of their enemies.
In the film adaptation, Macbeth's first act of killing the king is caused by this idea that enemies should not be feared and should be eliminiated. At first he is doubtful about killing the man that he is sworn to protect and obey, but when the king opens his eyes, Macbeth identifies the king as an enemy and brutally stabs him multiple times.


lib
/
com.github.thibaultbee.srtdroid.enums
/
KMState
/
KM_S_UNSECURED
KM_S_UNSECURED
KM_S_UNSECURED
No encryption


Lying on her narrow bed, Egwene frowned up at the flickering shadows cast on the ceiling by her single lamp. She wished she could form some plan of action, or reason out what to expect next. Nothing came. The shadows had more pattern than her thoughts. She could hardly even make herself worry about Mat, yet the shame she felt at that was small, crushed by the walls around her.
It was a stark, windowless room, like all those in the novices’ quarters, small and square and painted white, with pegs on one wall for hanging her belongings, the bed built against a second, and a tiny shelf on a third, where in other days she had kept a few books borrowed from the Tower library. A washstand and a three-legged stool completed the furnishings. The floorboards were almost white from scrubbing. She had done that task, on hands and knees, every day she had lived there, in addition to her other chores and lessons. Novices lived simply, whether they were innkeepers’ daughters or the Daughter-Heir of Andor.
She wore the plain white dress of a novice again—even her belt and pouch were white—but she felt no joy at having rid herself of the hated gray. Her room had become too much of a prison cell. What if they mean to keep me here. In this room. Like a cell. Like a collar and . . .
She glanced at the door—the dark Accepted would still be standing guard on the other side, she knew—and rolled close to the white plastered wall. Just above the mattress was a small hole, almost invisible unless you knew where to look, drilled through into the next room by novices long ago. Egwene kept her voice to a whisper.
“Elayne?” There was no answer. “Elayne? Are you asleep?”
“How could I sleep?” came Elayne’s reply, a reedy whisper through the hole. “I thought we might be in some trouble, but I did not expect this. Egwene, what are they going to do to us?”
Egwene had no answer, and her guesses were not of the sort she wanted to voice aloud. She did not even want to think of them. “I actually thought we might be heroes, Elayne. We brought back the Horn of Valere safely. We discovered Liandrin is Black Ajah.” Her voice skipped on that. Aes Sedai had always denied the existence of a Black Ajah, an Ajah that served the Dark One, and were known to become angry with anyone who even suggested it was real. But we know it’s real. “We should be heroes, Elayne.”
“ ‘Should and would build no bridges,’ ” Elayne said. “Light, I used to hate it when Mother said that to me, but it’s true. Verin said we mustn’t speak of the Horn, or Liandrin, to anyone but her or the Amyrlin Seat. I do not think any of this will work out the way we thought. It is not fair. We’ve been through so much; you’ve been through so much. It just is not fair.”
“Verin says. Moiraine says. I know why people think Aes Sedai are puppetmasters. I can almost feel the strings on my arms and legs. Whatever they do, it will be what they decide is good for the White Tower, not what is good or fair for us.”
“But you still want to be Aes Sedai. Don’t you?”
Egwene hesitated, but there was never any real question as to her answer. “Yes,” she said. “I still do. It is the only way we will ever be safe. But I will tell you this. I’ll not let myself be stilled.” That was a new thought, voiced as soon as it came to her, but she realized she did not want to take it back. Give up touching the True Source? She could sense it there, even now, the glow just over her shoulder, the shining just out of sight. She resisted the desire to reach out to it. Give up being filled with the One Power, feeling more alive than I ever have before? I won’t! “Not without a fight.”
There was a long silence from the other side of the wall. “How could you stop it? You may be as strong as any of them, now, but neither one of us knows enough yet to stop even one Aes Sedai from shielding us from the Source, and there are dozens of them here.”
Egwene considered. Finally she said, “I could run away. Really run away, this time.”
“They would come after us, Egwene. I’m sure they would.   I have seen something of the world. I can keep out of Aes Sedai hands if I want to.” She was trying to convince herself as much as Elayne. And what if I don’t know enough, yet? Enough about the world, enough about the Power? What if just channeling can still kill me? She refused to think of that. So much I have to learn yet. I won’t let them stop me.
“My mother might protect us,” Elayne said, “if what that Whitecloak said is true. I never thought I would hope something like that was the truth. But if it isn’t, Mother is just as likely to send us both back in chains. Will you teach me how to live in a village?”
Egwene blinked at the wall. “You will come with me? If it comes to that, I mean?”
There was another long silence, then a faint whisper. “I do not want to be stilled, Egwene. I will not be. I will not be!”
The door swung open, crashing against the wall, and Egwene sat up with a start. She heard the bang of a door from the other side of the wall. Faolain stepped into Egwene’s room, smiling as her eyes went to the tiny hole. Similar holes joined most of the novice rooms; any woman who had been a novice knew of them.
“Whispering with your friend, eh?” the curly-haired Accepted said with surprising warmth. “Well, it grows lonely, waiting by yourself. Did you have a nice chat?”
Egwene opened her mouth, then closed it again hastily. She could answer Aes Sedai, Sheriam had said. No one else. She regarded the Accepted with a level expression and waited.
 “On your feet. The Amyrlin’s not to be kept waiting by the likes of you.  Move!”
Novices were supposed to obey the Accepted almost as quickly as they obeyed Aes Sedai, but Egwene got to her feet slowly, and took as much time as she dared in smoothing her dress.  The scowl that rolled across the Accepted’s face made Egwene’s smile grow before she remembered to rein it in; there was no point in pushing Faolain too far. Holding herself straight, pretending her knees were not shaking, she preceded the Accepted out of the room.
Elayne was already waiting outside with the apple-cheeked Accepted, looking fiercely determined to be brave. Somehow, she managed to give the impression that the Accepted was a handmaid carrying her gloves. Egwene hoped that she herself was doing half so well.
The railed galleries of the novices’ quarters rose tier on tier above, in a hollow column, and fell as many below, to the Novices’ Court. There were no other women in sight. Even if every novice in the Tower had been there, though, less than a quarter of the rooms would have been filled. The four of them walked ’round the empty galleries and down the spiraling ramps in silence; none could bear to have the sounds of voices emphasize the emptiness.
Egwene had never before been into the part of the Tower where the Amyrlin had her rooms. The corridors there were wide enough for a wagon to pass down easily, and taller than they were wide. Colorful tapestries hung on the walls, tapestries in a dozen styles, of floral designs and forest scenes, of heroic deeds and intricate patterns, some so old they looked as if they might break if handled. Their shoes made loud clicks on diamond-shaped floor tiles that repeated the colors of the seven Ajahs.
There were few other women in evidence—an Aes Sedai now and then, sweeping majestically along with no time to notice Accepted or novices; five or six Accepted hurrying self-importantly about their tasks or studies; a sprinkling of serving women with trays, or mops, or armfuls of sheets or towels; a few novices moving on errands even more quickly than the servants.
Nynaeve and her slim-necked escort, Theodrin, joined them. Neither spoke. Nynaeve wore an Accepted’s dress, now, white with the seven colored bands at the hem, but her belt and pouch were her own. She gave Egwene and Elayne each a reassuring smile and a hug—Egwene was so relieved to see another friendly face that she returned the hug with barely a thought that Nynaeve was behaving as if she were comforting children—but as they walked on, Nynaeve gave her thick braid a sharp tug from time to time, too.
Very few men came into that part of the Tower, and Egwene saw only two: Warders walking side by side in conversation, one with his sword on his hip, the other with his on his back. One was short and slender, even slight, the other almost as wide as he was tall, yet both moved with a dangerous grace. The color-shifting Warder cloaks made them queasy-making to watch for long, parts of them sometimes seeming to fade into the walls bond. She saw Nynaeve looking at them, and shook her head. She has to do something about Lan. If any of us can do anything about anyone after today.
The antechamber of the Amyrlin Seat’s study was grand enough for any palace, though the chairs scattered about for those who might wait were plain, but Egwene had eyes only for Leane Sedai. The Keeper wore her narrow stole of office, blue to show she had been raised from the Blue Ajah, and her face could have been carved from smooth, brownish stone. There was no one else there.
“Did they give any trouble?” The Keeper’s clipped way of talking gave no hint now of either anger or sympathy.
“No, Aes Sedai,” Theodrin and the apple-cheeked Accepted said together.
“This one had to be pulled by the scruff of her neck, Aes Sedai,” Faolain said, indicating Egwene. The Accepted sounded indignant. “She balks as if she has forgotten what the discipline of the White Tower is.”
“To lead,” Leane said, “is neither to push nor to pull. Go to Marris Sedai, Faolain, and ask her to allow you to contemplate on this while raking the paths in the Spring Garden.” She dismissed Faolain and the other two Accepted, and they dropped deep curtsies. From the depth of hers, Faolain shot a furious look at Egwene.
The Keeper paid no attention to the Accepted’s leaving. Instead, she studied the remaining women, tapping a forefinger against her lips, till Egwene had the feeling they had all been measured to the inch and weighed to the ounce. Nynaeve’s eyes took on a dangerous sparkle, and she had a tight grip on her braid.
Finally Leane raised a hand toward the doors to the Amyrlin’s study. The Great Serpent bit its own tail, a pace across, on the dark wood of each. “Enter,” she said.
Nynaeve stepped forward promptly and opened one of the doors. That was enough to get Egwene moving. Elayne held her hand tightly, and she gripped Elayne’s just as hard. Leane followed them in and took a place to one side, halfway between the three of them and the table in the center of the room.
The Amyrlin Seat sat behind the table, examining papers. She did not look up. Once Nynaeve opened her mouth, but closed it again, at a sharp look from the Keeper. The three of them stood in a line in front of the Amyrlin’s table and waited. Egwene tried not to fidget. Long minutes went by—it seemed like hours—before the Amyrlin raised her head, but when those blue eyes fixed them each in turn, Egwene decided she could have waited longer. The Amyrlin’s gaze was like two icicles boring into her heart. The room was cool, but a trickle of sweat began to run down her back.
“So!” the Amyrlin said finally. “Our runaways return.”
“We did not run away, Mother.” Nynaeve was obviously straining for calm, but her voice shook with emotion. Anger, Egwene knew. That strong will was all too often accompanied by anger.
“Do not invoke Liandrin’s name here, child!” the Amyrlin snapped. Leane watched them with a stern serenity.
“Mother, Liandrin is Black Ajah,” Elayne burst out.
“That is known, child. Suspected, at least, and as good as known. Liandrin left the Tower some months ago, and twelve other—women—went with her. None has been seen since. Before they left, they tried to break into the storeroom where the angreal and sa’angreal are kept, and did manage to enter that where the smaller ter’angreal are stored. They stole a number of those, including several we do not know the use of.”
Nynaeve stared at the Amyrlin in horror, and Elayne suddenly rubbed her arms as if she were cold. Egwene knew she was shivering, too. Many times she had imagined returning to confront Liandrin and accuse her, to see her condemned to some punishment—except that she had never managed to imagine any punishment strong enough to suit that doll-faced Aes Sedai’s crimes. She had even pictured returning to find Liandrin already fled—in terror of her return, it was usually. But she had never imagined anything like this. If Liandrin and the others—she had not really wanted to believe there were others—had stolen those remnants of the Age of Legends, there was no telling what they could do with them. Thank the Light they did not get any sa’angreal, she thought. The other was bad enough.
Sa’angreal were like angreal, allowing an Aes Sedai to channel more of the Power than she safely could unaided, but far more powerful than angreal, and rare. Ter’angreal were something different. Existing in greater numbers than either angreal or sa’angreal, though still not common, they used the One Power rather than helping to channel it, and no one truly understood them. Many would work only for someone who could channel, needing the actual channeling of the Power, while others did what they did for anyone. Where all the angreal and sa’angreal Egwene had ever heard of were small, ter’angreal could seemingly be any size. Each had apparently been made for a specific purpose by those Aes Sedai of three thousand years ago, to do a certain thing, and Aes Sedai since had died trying to learn what; died, or had the ability to channel burned out of them. There were sisters of the Brown Ajah who had made ter’angreal their life’s study.
Some were in use, if likely not for the purposes they had been made. The stout white rod that the Accepted held while taking the Three Oaths on being raised to Aes Sedai was a ter’angreal, binding them to the oaths as surely as if they had been bred in the bone. Another ter’angreal was the site of the final test before a novice was raised to the Accepted. There were others, including many no one could make work at all, and many others that seemed to have no practical use.
Why did they take things no one knows how to use? Egwene wondered. Or maybe the Black Ajah does know. That possibility made her stomach churn. That might be as bad as sa’angreal in Darkfriend hands.
“Theft,” the Amyrlin went on in tones as cold as her eyes, “was the least of what they did. Three sisters died that night, as well as two Warders, seven guards, and nine of the servants. Murder, done to hide their thieving and their flight. It may not be proof they were—Black Ajah”—the words grated from her mouth—“but few believe otherwise. Nor do I, in truth. When there are fish heads and blood in the water, you don’t need to see the silverpike to know they are there.”
“Then why are we being treated as criminals?” Nynaeve demanded. “We were tricked by a woman of the—of the Black Ajah. That should be enough to clear us of any wrongdoing.”
The Amyrlin barked a mirthless laugh. “You think so, do you, child? It may be your salvation that no one in the Tower but Verin, Leane, and I even suspects you had anything to do with Liandrin. If that were known, much less the little demonstration you put on for the Whitecloaks—no need to look so surprised; Verin told me everything—if it were known you had gone off with Liandrin, the Hall might very well vote for stilling the three of you before you could take a breath.”
“That is not fair!” Nynaeve said. Leane stirred, but Nynaeve went on. “It is not right! It—!”
The Amyrlin stood up. That was all, but it cut Nynaeve short.
Egwene thought she was wise to keep quiet. She had always believed Nynaeve was as strong, as strong-willed, as anyone could be. Until she met the woman wearing the striped stole. Please keep your temper, Nynaeve. We might as well be children—babes facing our mother, and this Mother can do far worse than beat us.
It seemed to her a way out was being offered in what the Amyrlin had said, but she was not sure what way. “Mother, forgive me for speaking, but what do you intend to do to us?”
“Do to you, child? I intend to punish you and Elayne for leaving the Tower without permission, and Nynaeve for leaving the city without permission. First, you will each be called to Sheriam Sedai’s study, where I’ve told her to switch you till you wish you had a cushion to sit on for the next week. I have already had this announced to the novices and the Accepted.”
Egwene blinked in surprise. Elayne gave an audible grunt, stiffened her back, and muttered something under her breath. Nynaeve was the only one who seemed to take it without shock. Punishment, whether extra labors or something else, was always between the Mistress of Novices and whoever was called to her. Those were usually novices, but included the Accepted who stepped far enough beyond the bounds. Sheriam always keeps it between you and her, Egwene thought bleakly. She can’t have told everyone. But better than being imprisoned. Better than being stilled.
“The announcement is part of the punishment, of course,” the Amyrlin went on, as if she had read Egwene’s mind. “I have also had it announced that you are all three assigned to the kitchens, to work with the scullions, until further notice. And I have let it be whispered about that ‘further notice’ might just mean the rest of your natural lives. Do I hear objections to any of this?”
“No, Mother,” Egwene said quickly. Nynaeve would hate scrubbing pots even more than the other. It could be worse, Nynaeve. Light, it could be so much worse. Nynaeve’s nostrils had flared, but she gave her head a tight shake.
“And you, Elayne?” the Amyrlin said. “The Daughter-Heir of Andor is used to gentler treatment.”
“I want to be Aes Sedai, Mother,” Elayne said in a firm voice.
The Amyrlin fingered a paper in front of her on the table and seemed to study it for a moment. When she raised her head, her smile was not at all pleasant.  Letting yourselves be winkled out of the Tower like thoughtless children. Even an infant would never have fallen into that trap.
Egwene found herself offering silent thanks. A prickle ran over her skin as the Amyrlin continued.
“Now, as to what else I intend to do with you. It seems you have all increased your ability to channel remarkably since you left the Tower. You have learned much. Including some things,” she added sharply, “that I intend to see you unlearn!”
Nynaeve surprised Egwene by saying, “I know we have done . . . things . . . we should not have, Mother. I assure you, we will do our best to live as if we had taken the Three Oaths.”
The Amyrlin grunted. “See that you do,” she said dryly. “If I could, I’d put the Oath Rod in your hands tonight, but as that is reserved for being raised to Aes Sedai, I must trust to your good sense—if you have any—to keep you whole. As it is, you, Egwene, and you, Elayne, are to be raised to the Accepted.”
Elayne gasped, and Egwene stammered a shocked, “Thank you, Mother.” Leane shifted where she stood. Egwene did not think the Keeper looked best pleased. Not surprised—she had obviously known it was coming—but not pleased, either.
“Do not thank me. Your abilities have gone too far for you to remain novices. Some will think you should not have the ring, not after what you’ve done, but the sight of you up to your elbows in greasy pots should mute the criticism. And lest you start thinking it’s some sort of reward, remember that the first few weeks as one of the Accepted are used to pick the rotting fish out of the basket of good ones. Your worst day as a novice will seem a fond dream compared to the least of your studies over the next weeks. I suspect that some of the sisters who teach you will make your trials even worse than they strictly must be, but I don’t believe you will complain. Will you?”
I can learn, Egwene thought. Choose my own studies. I can learn about the dreams, learn now to . . .
The Amyrlin’s smile cut off her train of thought. That smile said nothing the sisters could do to them would be worse than it needed to be, if it left them alive. Nynaeve’s face was a mixture of deep sympathy and horrified remembrance of her own first weeks as one of the Accepted. The combination was enough to make Egwene swallow hard. “No, Mother,” she said faintly. Elayne’s reply was a hoarse whisper.
“Then that’s done. Your mother was not at all pleased by your disappearance, Elayne.”
“She knows?” Elayne squeaked.
Leane sniffed, and the Amyrlin arched an eyebrow, saying, “I could hardly keep it from her. You missed her by less than a month, which may be as well for you. You might not have survived that meeting. She was mad enough to chew through an oar, at you, at me, at the White Tower.”
“I can imagine, Mother,” Elayne said faintly.
“I don’t think you can, child. You may have ended a tradition that began before there was an Andor. A custom stronger than most laws. Morgase refused to take Elaida back with her. For the first time ever, the Queen of Andor does not have an Aes Sedai advisor. She demanded your immediate return to Caemlyn as soon as you were found. I convinced her it would be safer for you to train here a little longer.  They talked their way out of that themselves. I still do not know how.”
Elayne seemed to be looking inward, perhaps seeing Morgase in all her anger. She shivered. “Gawyn is my brother,” she said absently. “Galad is not.”
“Do not be childish,” the Amyrlin told her. “Sharing the same father makes Galad your brother, too, whether or not you like him. I will not allow childishness out of you, girl. A measure of stupidity can be tolerated in a novice; it is not allowed in one of the Accepted.”
“Yes, Mother,” Elayne said glumly.
“The Queen left a letter for you with Sheriam. Aside from giving you the rough side of her tongue, I believe she states her intention of bringing you home as soon as it is safe for you. She is sure that in a few more months at most you will be able to channel without risking killing yourself.”
“But I want to learn, Mother.” The iron had returned to Elayne’s voice. “I want to be Aes Sedai.”
The Amyrlin’s smile was even grimmer than her last. “As well that you do, child, because I have no intention of letting Morgase have you. You have the potential to be stronger than any Aes Sedai in a thousand years, and I will not let you go until you achieve the shawl as well as the ring. Not if I have to grind you into sausage to do it. I will not let you go. Do I make myself clear?”
“Yes, Mother.” Elayne sounded uneasy, and Egwene did not blame her. Caught between Morgase and the White Tower like a towel between two dogs; caught between the Queen of Andor and the Amyrlin Seat. If Egwene had ever envied Elayne her wealth and the throne she would one day occupy, at that moment she surely did not.
The Amyrlin said briskly, “Leane, take Elayne down to Sheriam’s study. I have a few words yet to say to these other two. Words I do not think they will enjoy hearing.”
Egwene exchanged startled looks with Nynaeve; for a moment, worry dissolved the tension between them. What does she have to say to us and not to Elayne? she wondered. I do not care, so long as she does not try to stop me learning. But why not Elayne, too?
Elayne grimaced at the mention of the Mistress of Novices’s study, but she drew herself up as Leane came to her side. “As you command, Mother,” she said formally, lowering herself in a perfect curtsy, skirts sweeping wide, “so shall I obey.”


Win the chance to brew your beer with us to launch at Craft Beer Rising!
Read onWe’re ridiculously proud of our brewery and love nothing more than to share what we do with others.
Discover the breweryCamden Town Brewery is served in bars and pubs, and stocked in Waitrose and Majestic Wines.
Find beerFind out about the Camden Beer Team and what it's like working at a Brewery.
Meet the team


Serenity Step Libraries
In Serenity, tests are broken down into reusable steps. An important principle behind Serenity is the idea that it is easier to maintain a test that uses several layers of abstraction to hide the complexity behind different parts of a test.
In an automated acceptance test, test steps represent the level of abstraction between the code that interacts with your application (for example, Page Objects in an automated web test, which are designed in terms of actions that you perform on a given page) and higher-level stories (sequences of more business-focused actions that illustrate how a given user story has been implemented). If your automated test is not UI-oriented (for example, if it calls a web service), steps orchestrate other more technical components such as REST clients. Steps can contain other steps, and are included in the Serenity reports. Whenever a step is executed, a screenshot is stored and displayed in the report.
Breaking down tests into steps
Suppose we are testing a Frequent Flyer programme, and need to illustrate the following business rules:
-
Members should start with Bronze status
-
Members should earn Silver status after flying 10,000 km.
Each of these can be broken down further into business tasks and verifications. For example, the first rule could be broken into two steps:
-
Create a new Frequent Flyer member
-
Check that the member has a status of Bronze
And the second can be broken into three steps:
-
Create a new Frequent Flyer member
-
Make the member fly 10000 km
-
Check that the member has a status of Silver
We could express these tests using Serenity in JUnit as follows:
package flyer;
import net.serenitybdd.junit.runners.SerenityRunner;
import net.thucydides.core.annotations.Steps;
import org.junit.Test;
import org.junit.runner.RunWith;
import flyer.steps.TravellerEarningStatusPoints;
import static flyer.Status.Bronze;
import static flyer.Status.Silver;
/// [classbody]
@RunWith(SerenityRunner.class)
public class WhenEarningFrequentFlyerStatus {
@Steps
TravellerEarningStatusPoints tracy;
@Test
public void members_should_start_with_Bronze_status() {
// GIVEN
tracy.joins_the_frequent_flyer_program();
// THEN
tracy.should_have_a_status_of(Bronze);
}
@Test
public void earn_silver_after_10000_kilometers() {
// GIVEN
tracy.joins_the_frequent_flyer_program();
// WHEN
tracy.flies(10000);
// THEN
tracy.should_have_a_status_of(Silver);
}
}
/// [classbody]
Notice how the second test reuses step methods used in the first to perform a slightly different test. This is a typical example of the way we reuse steps in similar tests, in order to avoid duplicated code and make the code easier to maintain.
Implementing Step Libraries
The TravellerEarningStatusPoints
class is what we call a step library. We use the @Steps
class as shown above to indicate a step library in our test code: this annotation tells Serenity to instantiate and instrument this field, so that methods you call in this library also appear in the test reports, just like in the one you can see here:
Step libraries contain the business tasks or actions that a user performs during a test. There are many ways to organise your step libraries, but a convenient way is to group methods in slices of business behaviour for a given type of user. In this case a traveller who is earning status points.
Notice that it was not necessary to explicitly instantiate the Steps
class TravellerEarningStatusPoints
. When you annotated a member variable of this class with the @Steps
annotation, Serenity BDD will automatically instantiate it for you.
|
You should never create instances of step libraries using the |
Step methods are annotated with the @Step annotation:
package flyer.steps;
import flyer.FrequentFlyer;
import flyer.Status;
import net.thucydides.core.annotations.Step;
import static org.assertj.core.api.Assertions.assertThat;
/// [classbody]
/// [preamble]
public class TravellerEarningStatusPoints { (1)
private String actor; (2)
private FrequentFlyer frequentFlyer;
/// [preamble]
/// [joins]
@Step("#actor joins the frequent flyer program") (3) (4)
public void joins_the_frequent_flyer_program() {
frequentFlyer = FrequentFlyer.withInitialBalanceOf(0);
}
/// [joins]
@Step("#actor flies {0} km") (5)
public void flies(int distance) {
frequentFlyer.recordFlightDistanceInKilometers(distance);
}
@Step("#actor should have a status of {0}")
public void should_have_a_status_of(Status expectedStatus) {
assertThat(frequentFlyer.getStatus()).isEqualTo(expectedStatus);
}
@Step("#actor transfers {0} points to {1}")
public void transfers_points(int points, TravellerEarningStatusPoints otherFrequentFlier) {
// Left as an exercise
}
@Override
public String toString() {
return actor;
}
@Step("#actor should have {0} points")
public void should_have_points(int expectedPoints) {
// Left as an exercise
}
}
/// [classbody]
| 1 | Steps classes can extend any class, or none |
| 2 | If you include an actor field in your step library, Serenity will inject the name of the step. |
| 3 | The @Step annotation denotes a Serenity step method |
| 4 | The @Step can take a String value to override the default step name |
| 5 | {0} indicates the first parameter of the step method. #name indicates the name field of the step library. |
One of the keys to writing good tests is getting the layers right. Test suites are more maintainable when they are organised in clear, well defined layers. This helps our brain concentrate on one thing at a time.
Step libraries and personas
Step libraries are often used to represent actors or persona who interact with the application. For example, the TravellerEarningStatusPoints
step library we saw earlier represents how a Frequent Flyer member earns status points.
Methods that represent a business task or action (joins_the_frequent_flyer_program()
), and that will appear in the reports as a separate step, are annotated with the @Step
annotation.
package flyer.steps;
import flyer.FrequentFlyer;
import flyer.Status;
import net.thucydides.core.annotations.Step;
import static org.assertj.core.api.Assertions.assertThat;
/// [classbody]
/// [preamble]
public class TravellerEarningStatusPoints { (1)
private String actor; (2)
private FrequentFlyer frequentFlyer;
/// [preamble]
/// [joins]
@Step("#actor joins the frequent flyer program") (3) (4)
public void joins_the_frequent_flyer_program() {
frequentFlyer = FrequentFlyer.withInitialBalanceOf(0);
}
/// [joins]
@Step("#actor flies {0} km") (5)
public void flies(int distance) {
frequentFlyer.recordFlightDistanceInKilometers(distance);
}
@Step("#actor should have a status of {0}")
public void should_have_a_status_of(Status expectedStatus) {
assertThat(frequentFlyer.getStatus()).isEqualTo(expectedStatus);
}
@Step("#actor transfers {0} points to {1}")
public void transfers_points(int points, TravellerEarningStatusPoints otherFrequentFlier) {
// Left as an exercise
}
@Override
public String toString() {
return actor;
}
@Step("#actor should have {0} points")
public void should_have_points(int expectedPoints) {
// Left as an exercise
}
}
/// [classbody]
Notice how the @Step
attribute has a string value. This tells Serenity what to write in the reports when this step is executed. You don’t need a value (if you don’t have one, the name of the method will be used instead). But you can use this value to make your step names more meaningful.
If you add an actor
field to your step library, Serenity will inject the name of the @Steps
variable into this field. You can then refer to it in the @Step annotation using the #
notation that we saw earlier:
@Step("#actor joins the frequent flyer program")
Suppose we declare a step library like this:
@Steps
TravellerEarningStatusPoints tracy;
In this case, the name "Tracy" would be injected into the actor
field, and the step description would become "Tracy joins the frequent flyer program"
You can also provide a more detailed name in the @Steps annotation:
@Steps("Tracy Jones")
TravellerEarningStatusPoints tracy;
@Step methods can also take parameters, as we saw for the flies()
and should_have_a_status_of()
methods. You can refer to these in your step description using an indexed notation starting at zero: {0}
for the first parameter, {1}
for the second, and so on.
@Step("#actor flies {0} km")
public void flies(int distance) {...}
This step would appear in the Serenity reports as "Tracy flies 10000 km".
Using several step libraries to represent different actors
Sometimes we can use several step libraries of the same type to make our tests more readable. For example, the following test shows how point transfers between different travellers works.
package flyer;
import flyer.steps.TravellerEarningStatusPoints;
import net.serenitybdd.junit.runners.SerenityRunner;
import net.thucydides.core.annotations.Steps;
import org.junit.Test;
import org.junit.runner.RunWith;
import static flyer.Status.Bronze;
import static flyer.Status.Silver;
/// [classbody]
@RunWith(SerenityRunner.class)
public class WhenTransferringFrequentFlyerPoints {
@Steps
TravellerEarningStatusPoints tracy;
@Steps
TravellerEarningStatusPoints troy;
@Test
public void memberCanTransferPointsToAnotherMemberWithoutLosingStatus() {
// GIVEN
tracy.joins_the_frequent_flyer_program();
troy.joins_the_frequent_flyer_program();
// AND
tracy.flies(20000);
// WHEN
tracy.transfers_points(15000, troy);
// THEN
troy.should_have_points(15000);
// AND
tracy.should_have_a_status_of(Silver);
}
}
/// [classbody]
...
package flyer.steps;
import flyer.FrequentFlyer;
import flyer.Status;
import net.thucydides.core.annotations.Step;
import static org.assertj.core.api.Assertions.assertThat;
/// [classbody]
/// [preamble]
public class TravellerEarningStatusPoints { (1)
private String actor; (2)
private FrequentFlyer frequentFlyer;
/// [preamble]
/// [joins]
@Step("#actor joins the frequent flyer program") (3) (4)
public void joins_the_frequent_flyer_program() {
frequentFlyer = FrequentFlyer.withInitialBalanceOf(0);
}
/// [joins]
@Step("#actor flies {0} km") (5)
public void flies(int distance) {
frequentFlyer.recordFlightDistanceInKilometers(distance);
}
@Step("#actor should have a status of {0}")
public void should_have_a_status_of(Status expectedStatus) {
assertThat(frequentFlyer.getStatus()).isEqualTo(expectedStatus);
}
@Step("#actor transfers {0} points to {1}")
public void transfers_points(int points, TravellerEarningStatusPoints otherFrequentFlier) {
// Left as an exercise
}
@Override
public String toString() {
return actor;
}
@Step("#actor should have {0} points")
public void should_have_points(int expectedPoints) {
// Left as an exercise
}
}
/// [classbody]
This would produce a report where both actors (Tracy and Troy) appear in different roles:
Note that a more elegant way to do this is by using the Screenplay pattern, where each actor can have their own browser and abilities.
Shared Instances of Step Libraries
There are some cases where we want to reuse the same step library instance in different places across a test. For example, suppose we have a step library that interacts with a backend API, and that maintains some internal state and caching to improve performance. We might want to reuse a single instance of this step library, rather than having a separate instance for each variable.
We can do this by declaring the step library to be shared, like this:
@Steps(shared = true)
CustomerAPIStepLibrary customerAPI;
Now, any other step libraries of type CustomerAPIStepLibrary
, that have the shared
attribute set to true will refer to the same instance.
In older versions of Serenity, sharing instances was the default behaviour, and you used the uniqueInstance
attribute to indicate that a step library should not be shared. If you need to force this behaviour for legacy test suites, set the step.creation.strategy
property to legacy
in your serenity.properties
file:
step.creation.strategy = legacy
Sharing instances using the @Shared annotation
You can also use the @Shared
annotation to share objects between steps and tasks in your test.
The @Shared
annotation is in practical terms a shortcut for @Steps(shared=true)
. This is handy in Screenplay tests, where the @Shared
annotation reflects the intention more accurately than the @Steps
annotation.
For example, suppose you have a Screenplay task that you use to set up some reference data that you want to share between steps. You could set them up in a special task called PrepareReferenceTestData
:
givenThat(dana).wasAbleTo(PrepareReferenceTestData.inTheTestEnvironment());
The PrepareReferenceTestData
class would prepare test data and place the data in a Java class (say ReferenceData
):
public class PrepareReferenceTestData implements Task {
public static Performable inTheTestEnvironment() {
return instrumented(PrepareSomeCommonData.class);
}
@Shared
ReferenceData referenceData;
@Override
public <T extends Actor> void performAs(T actor) {
// Prepare reference data used in several tasks in a shared class
referenceData = ...
}
}
Any other Task
, Interaction
or Question
class can then refer to the reference data, simply by declaring a shared field of type ReferenceData
:
@Shared
ReferenceData referenceData;


WITNESS LIST Oversight of Electric Utility Restructuring Committee September 29, 2004 -10:00A Credit Information ON: O'Malley, Paul CEO (TXU Energy), Austin, TX Electric Utility Oversight FOR: King, Robert President (Good Company Associates), Austin, TX ON: Buckles, Maxine Chief Financial Officer (Electric Reliability Council of Texas), Austin, TX Greene, Michael Chairman (Electric Reliability Council of Texas), Austin, TX Hudson, Paul Chairman (Public Utility Commission), Austin, TX Parsley, Julie Commissioner (Public Utility Commission), Austin, TX Schrader, Thomas CEO (Electric Reliability Council of Texas), Austin, TX Smitherman, Barry Commissioner (Public Utility Commission), Austin, TX


--- layout: standardPage ---
BombBomb has assembled the following projects and libraries to make it easy and fast to get up and running with the BombBomb API.
The easiest way to get started with BombBomb’s API on your web site or application is to use our Javascript wrapper, BBCore. BBCore wraps the functionality exposed below into a simple Javascript interface allowing you to offer BombBomb features on your site or application without having to write server-side code. BBCore is open source and available at https://github.com/bombbomb/BBCore
npm install bombbomb
pip install 'bombbomb'
gem install bombbomb
composer require bombbomb/bombbomb
BombBomb's API is documented in a machine readable way using the Swagger/OpenAPI specification. Swagger's Codegen project allows us generate most of the libraries above automatically as the API gains new capabilities. If you have a language you would like to add to our build pipeline, you can add it to our OpenAPIBuilder project.


These terms and conditions, which can be changed periodically, are applied to all our services. By using our website (online, by e-mail or using any other mobile device) you acknowledge that you have read, understood and agreed to the terms and conditions mentioned below as well as the
privacy policy.
1. Copyright
Except when mentioned otherwise, these pages, its content, images, texts, logo, infrastructure and service are property of, managed and available by UBEOS (“ubeos”, “our” or “ours”).
None of these contents should be used without our previous written permission.
2. Our goal
Through this website we offer a platform that allows you to submit travel requests which we will send to our partners. They will come up with their own quotations for which they are responsible. Our system will be part of the process by acting as a mediator between the user’s request, its presentation and negotiation with our partners.
3. Send of requests, proposals and messages exchanged between users
Whether it is in the process of submitting a new request or proposal, or in the process of the several mechanisms available to send a message to other user, UBEOS does not check its content. This means we are not held responsible for the messages. However, UBEOS has the right, in its sole discretion, to remove by any reason or without previous notice the users’ messages and/or the website contents.
Please find bellow an incomplete list of the forbidden or illegal messages on the website. UBEOS reserves the right to change this list at any time and to investigate and take legal action, in its sole discretion, against any person who violates this device. This will enable us to remove the service’s offensive communication and the offender’s right to access the website.
- Sending of personal contacts on the requests;
- Sending of personal contacts on the proposals;
- Sending of personal contacts on messages to the users;
- Sending of personal contacts on messages to the partners;
- To insult and/or to offend another user or partner through any communication mechanism of the website;
4. Complaint policy for illegal content
UBEOS operates on the concept of "notice and withdraw”. Should you have any complaint or objection to materials or content (including messages of users sent by the website), or if you believe that the content posted violates copyrights held by you, please contact us immediately at our e-mail
<EMAIL_ADDRESS>After the warning, we will make every possible effort to remove the illegal content within an acceptable period of time.
5. Privacy
We will make use of any personal information submitted by you on the website accordingly to our
privacy policy.
6. Cancellation
By accepting a partner’s quotation, the cancellation policies in place will be the ones implemented by them at the time of acceptance of the proposal.
7. Changes
UBEOS can add, remove or change these Terms and Conditions if necessary. This could be due to legal issues, regulators or technical reasons or even due to changes on the provided services or on the websites’ layout. UBEOS will send notifications concerning the changes to its users. After receiving the notification, you agree to follow these Terms and Conditions when using the website. Continuing to use the website after receiving UBEOS’ notifications indicates your acceptance to the changes.
8. General Provisions
To the extent permitted by law, this terms and conditions and the realization of our services shall be governed and
built according to Portuguese law.
The original version in Portuguese, of these terms and conditions, may have been translated into other languages.
The translated versions are a courtesy and office translation only, which can not take any rights.
In the event of a dispute over the content or interpretation of these terms and conditions or inconsistency
discrepancy between the Portuguese version and any other language version of these terms and conditions,
the Portuguese version shall prevail and be conclusive to the extent permitted by law.
The Portuguese version is available on our website (by selecting the Portuguese language) or you will be sent,
if you request in writing or via email.


int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);
Three independent sets of descriptors are watched. Those listed in readfds will be watched to see if characters become available for reading, those in writefds will be watched to see if it is ok to immediately write on them, and those in exceptfds will be watched for exceptions. On exit, the sets are modified in place to indicate which descriptors actually changed status.
Four macros are provided to manipulate the sets. FD_ZERO will clear a set. FD_SET and FD_CLR add or remove a given descriptor from a set. FD_ISSET tests to see if a descriptor is part of the set; this is useful after select returns.
n is the highest-numbered descriptor in any of the three sets, plus 1.
timeout is an upper bound on the amount of time elapsed before select returns. It may be zero, causing select to return immediately. If timeout is NULL (no timeout), select can block indefinitely.
On Linux, timeout is modified to reflect the amount of time not slept; most other implementations do not do this. This causes problems both when Linux code which reads timeout is ported to other operating systems, and when code is ported to Linux that reuses a struct timeval for multiple selects in a loop without reinitializing it. Consider timeout to be undefined after select returns.
#include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int main(void) { fd_set rfds; struct timeval tv; int retval; /* Watch stdin (fd 0) to see when it has input. */ FD_ZERO(&rfds); FD_SET(0, &rfds); /* Wait up to five seconds. */ tv.tv_sec = 5; tv.tv_usec = 0; retval = select(1, &rfds, NULL, NULL, &tv); /* Don't rely on the value of tv now! */ if (retval) printf("Data is available now.\n"); /* FD_ISSET(0, &rfds) will be true. */ else printf("No data within five seconds.\n"); exit(0); }


Projects
- CoinScribble - Cryptocurrency Social Journalism Platform
- Crypico - Cryptocurrency Freelancing Platform
- Amulet - Cryptocurrency Derivative Trading Platform
Skills
- HTML CSS Marketing HubSpot Marketing Sales Web Development Cryptocurrencies + All skills


Hey! You shouldn't be here. This could be because the form you are
trying to access has closed. On the other hand, if you're having trouble
accessing an Admin page, make sure you've
been added as an editor or reviewer. Or you could just go back
Home.


If you are a student or a professional
Welcome
To make precise and beautiful Resumes, you need to Login to our website using Google Sign-in. Click on "Login with Google" button on top-right corner of the page as shown in the image.
Select the template
We have several beautiful templates available, which you can choose to make your CV. This templates will help you keep your Resume consice and readable.
Make your Resume
Fill/Edit all your details in the Resume template like your personal details, educational qualifications, skills, hobbies etc.
Download
After completing the details in the template, you are all set to download your Resume. Click on the Print/Save botton to download your resume in pdf format.
 Your institute's student will be able to use the template that you upload. Sign in if you already have an account, otherwise you can register
Register your Institute
Enter all the details in the form and click on register. We will verify the details and mail you in 2-3 days.
Upload the template
Once logged in, you can upload the pdf of resume your institute wants to use. Click on upload, and select the pdf file and upload.
Wait
Once you have uploaded the file, the screen will look like this. We will upload the template for your students in 2-r days time.


Color Scheme
#FFF33B
#E93E3A
#F3903F
#FDC70C
#2A91FF
Color Application
The colors that we are using in this site are a bright warm color scheme accented with blue (specific color codes above). We will use our blue for our headers, footers, and H3 headings. Navigation will be orange. H1, H2 Will be orange-red. Yellow and Yellow Orange will be used as background against black type.


First Section
Mauris in lorem nisl. Maecenas tempus facilisis ante, eget viverra nisl tincidunt et. Donec turpis lectus, mattis ac malesuada a, accumsan eu libero. Morbi condimentum, tortor et tincidunt ullamcorper, sem quam pretium nulla, id convallis lectus libero nec turpis. Proin dapibus nisi id est sodales nec ultrices tortor pellentesque.
{ mkDerivation, base, bytestring, hakyll, hakyll-sass, hjsmin
, stdenv
}:
mkDerivation {
pname = "nix-hakyll-test";
version = "<IP_ADDRESS>";
src = ./.;
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
base bytestring hakyll hakyll-sass hjsmin
];
license = stdenv.lib.licenses.bsd3;
}
Second Section
Vivamus vel nisi ac lacus sollicitudin vulputate ac ut ligula. Nullam feugiat risus eget eros gravida in molestie sapien euismod. Nunc sed hendrerit orci. Nulla mollis consequat lorem ac blandit. Ut et turpis mauris. Nulla est odio, posuere id ullamcorper sit amet, tincidunt vel justo. Curabitur placerat tincidunt varius. Nulla vulputate, ipsum eu consectetur mollis, dui nibh aliquam neque, at ultricies leo ligula et arcu.
Cabal files can be referred to using the magic URL cabal://NAME-VERSION, which will automatically download the file from Hackage. Alternatively, a direct http://host/path/pkg.cabal URL can be provided, as well as a file:///local/path/pkg.cabal URI that doesn’t depend on network access. However, if the source hash is not already in cabal2nix’s cache or provided using the –sha256 option, cabal2nix still needs to download the source code to compute the hash, which obviously still causes network traffic. Run the utility with –help to see the complete list of supported command line flags.
Detailed instructions how to use those generated files with Nix can be found at https://nixos.org/nixpkgs/manual/#how-to-create-nix-builds-for-your-own-private-haskell-packages.
cabal2nix can also build derivations for projects from other sources than hackage. You only need to provide an URI that points to a cabal project. The most common usecase for this is probably to generate a derivation for a project on the local file system:


You probably found this link from our 2019 paper.
Unfortunately, we updated our site but the new website does not yet contain a page with a description of our dataset selection strategy.
You will be redirected to the markdown file from which the old page was generated, so you can still view the old text.
If you are not redirected within 5 seconds, you can find it at
https://github.com/openml/automlbenchmark/blob/2fe3bd41768ce28387f827791bd57ef1a5a84783/docs/benchmark_datasets.md.


I missed two days of school last week. One day gone is enough added work on it’s own, two is nearly unthinkable. I wanted to make sure my students did something meaningful – as always – but without the need for a substitute to try and manage device access, etc.
I think one of my favorite definitions of “rigor” has to do with the cognitive task and level achieved by students as they work on a task. It isn’t related to the “difficulty” – perceived or inherent – as each student can jump to higher orders of thinking at various points in any given task, thus achieving rigorous thought patters. I’ve spent a good amount of time this year reaching for that goal in all lessons with some success and some failure.
I designed a task in which students spiraled up through an idea by first approaching the knowledge I needed them to have through applying skills developed as part of the knowledge-acquisition phase. We’re about half way through a unit on motion, so a lot of what they worked on included some prior exposure.
This portion’s role was to help solidify and formalize information. Definitions of terms and basic application questions were geared to help frame the rest of the activity. This page was meant to be a warm-up; something to help get the juices flowing. The questions here were recall or lookup only.
A major part of the motion unit is knowing when something has changed its position. This is a deceptively simple statement. We’re so used to movement in our lives that we lack the vocabulary to explain what motion really is without practice. (If you want to see this in action, ask students how they know when there has been movement. You’ll get some interesting responses.) Part 1 gives them the vocabulary necessary. Now it’s time to start developing skills.
Maps are essential in describing movement every day. We Google addresses all the time to get from place to place. Part 2 asked my students to interpret a map of our city with five locations laid out. Before even layering motion into the task, they needed to identify the locations and measure distance and displacement of each one. We spiraled back to ideas in Part 1 to formalize the context. The point of this section was to marry the information with the skills necessary to complete the task.
Now that students had a vocabulary and a skillset to get around town, they had to tackle one final task. I provided a hypothetical schedule of events they had to get to throughout the day. They made up a driving schedule based on that information and then linked it to the distance and driving time using local speed limits. Finally, they took all of that and turned it into a position/time graph, which they’ve been reading for weeks now.
The entire point of the task was to help them see the application of small ideas in every day life. Every time we make plans, we go through this process – when do I need to arrive? How long will it take to get there? Which route should I go? Familiarity with the fringe of content is both an entry and a barrier: we can use it to break the idea open though context or we can struggle with helping students see the underlying ideas.
Feel free to take a look at the Google Doc with each component in order.
Written on September 21st , 2015 by Brian Bennett Categorized in: Teaching
Leave a comment


index
|
Back
Project: npn13g2l_VBIC_Q118
Maximum Oscillation Frequency fmax(IC) - VCB=0.25V
Temperatures: -40 C, -10 C, 27 C, 85 C, 125 C


Dr. Norman Borlaug Microverse
Here's a time line of Dr. Borlaug's life:
- 1914 - Born in Cresco, Iowa
- 1933 - Leaves his family's farm to attend the University of Minnesota, thanks to a Depression era program known as the "National Youth Administration"
- 1935 - Has to stop school and save up more money. Works in the Civilian Conservation Corps, helping starving Americans. "I saw how food changed them", he said. "All of this left scars on me."
- 1938 - Marries wife of 69 years Margret Gibson. Gets laid off due to budget cuts. Inspired by Elvin Charles Stakman, he returns to school study under Stakman, who teaches him about breeding pest-resistent plants.
If you have time, you should read more about this incredible human being on his Wikipedia entry.


Contributing¶
Contributions are welcome and they are greatly appreciated! Every little bit helps and credit will always be given.
Bug Reports¶
If you find a bug, please file a detailed issue here and provide input files so that we can try to reproduce the problem.
Code Style¶
PEP8 describes the style guide for python code. Please try to follow it when reasonable, in particular the naming conventions (e.g. public methods should use lower_case_with_underscores instead of camelCase).
Two helpful tools for checking your code are flake8 and pylint. The latter is a lot pickier but generally, your code should pass most flake8 tests:
$ pip install flake8 pylint
Also some IDE’s like PyCharm will notify you of PEP8 violations as you code.
Note
Some older chunks of the code do not yet adhere to PEP8. If you find something easily fixable, please do so!
Running our tests¶
InterMol uses py.test for unit testing. To run them simply type run the following while in the base directory:
$ py.test
We need a LOT more tests so any help here is especially welcome!
To debug failing tests, you typically get a clearer output by running a subset of the tests, e.g.:
$ python test_gromacs.py --type unit
which prints out log files to intermol/tests/unit_test_outputs/from_gromacs/[system name]/debug.log. Re-running a single test is best done directly via the convert.py script, e.g.:
$ python convert.py --gro_in tests/gromacs/unit_tests/[system name]/[system name].{top,gro} --gromacs -e
Note
If you have any ideas or suggestions for streamlining the testing process please let us know by filing an issue or opening a pull request!
Git Flow¶
Because we are supporting multiple molecular dynamics engines that should all work independently, we try to keep development of each engine in a separate branch until the basics are working.
To this end, we’ve started working with the git flow branching model. The basic things to know are:
- The master branch is strictly used for releases.
- The develop branch is where (!!!) development happens.
- When we start working on a new engine, we create a feature branch. E.g., at the time of this writing, there are branches called feature/lammps and feature/desmond. Once the overall structure in this branch is fairly stable and has a good amounts of tests, we merge it into develop.
So what do you, the interested developer, need to know?
- Don’t make pull requests against master.
- Choose either develop or the appropriate feature/* branch to pull against.
For more reading and a neat tool to help with branching see:
http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/


Time until accordion collapse: 0.
This tab contains a bunch of controls that can be closed.
Switch to Tab One to see controls that can be closed.


Hi,
I am a first-year Ph.D. student in Computer Science at Indiana University Bloomington and am fortunate to be under the guidance of Prof. Xiaojing Liao.
Research Interests
Computer Security and Privacy
Education
Experience
Publications
Qichen Wang, Chaoqi Zhang, Danish Alsayed, Ke Yi, Bin Wu, Feifei Li, and Chaoqun Zhan. Proceedings of the VLDB Endowment 14(12): 2667-2670 (2021). Demonstration paper.


Only users with ROLE_ADMIN can see this
Only users with ROLE_USER can see this
Only user with ROLE_ADMIN OR ROLE_USER can see this
Only user with ROLE_ADMIN OR ROLE_USER can see this
Only user that do not have BAD_USER can see this
Nobody should ever ever see this


|
| static function | setGetProp (in isFlushed, in isPresenceChecked, in branchName, in propName, in propVal) |
| |
- Author
- Peter Gagarinov, PhD pgaga.nosp@m.rino.nosp@m.v@gma.nosp<EMAIL_ADDRESS>- Copyright
- 2015-2016 Peter Gagarinov, PhD
2012-2015 Moscow State University,
Faculty of Applied Mathematics and Computer Science,
System Analysis Department
Definition at line 7 of file StaticPropStorage.m.
◆ flushInternal()
| static function mxberry::core::obj::StaticPropStorage::flushInternal |
( |
in |
branchName | ) |
|
|
staticprotected |
◆ getPropInternal()
| static function mxberry::core::obj::StaticPropStorage::getPropInternal |
( |
in |
branchName, |
|
|
in |
propName, |
|
|
in |
isPresenceChecked |
|
) |
| |
|
staticprotected |
◆ setGetProp()
| static function mxberry::core::obj::StaticPropStorage::setGetProp |
( |
in |
isFlushed, |
|
|
in |
isPresenceChecked, |
|
|
in |
branchName, |
|
|
in |
propName, |
|
|
in |
propVal |
|
) |
| |
|
staticprivate |
◆ setPropInternal()
| static function mxberry::core::obj::StaticPropStorage::setPropInternal |
( |
in |
branchName, |
|
|
in |
propName, |
|
|
in |
propVal |
|
) |
| |
|
staticprotected |
The documentation for this class was generated from the following file:


|
DeBox AudioRig
|
An AudioRig audio player. Place it in your scene on an empty game object More...
Public Member Functions | |
| IAudioPlayControlPromise | Play (AudioClip audioClip, Vector3 position) |
| Play an audio clip at position, spatial blend will be 1 More... | |
| IAudioPlayControlPromise | PlayLoop (AudioClip clip) |
| Plays the audio clip in a loop More... | |
| IAudioPlayControlPromise | Play (AudioClip audioClip) |
| Play an audio clip, spatial blend will be 0 More... | |
| IAudioPlayControlPromise | Play (AudioClip audioClip, float volume) |
| Play an audio clip at a specific volume, spatial blend will be 0 More... | |
| IAudioPlayControlPromise | Play (AudioClip clip, float volume, bool loop, float spatial) |
Protected Member Functions | |
| virtual void | Awake () |
| Unity Awake, initializes the manager More... | |
Properties | |
| bool | IsInitialized [get, protected set] |
| Indicates the manager is initialized More... | |
| static AudioPlayer | Main [get] |
| Returns the main AudioPlayer if such exists More... | |
An AudioRig audio player. Place it in your scene on an empty game object
Definition at line 319 of file AudioPlayer.cs.
|
protectedvirtual |
Unity Awake, initializes the manager
Definition at line 348 of file AudioPlayer.cs.
| IAudioPlayControlPromise DeBox.AudioRig.AudioPlayer.Play | ( | AudioClip | audioClip | ) |
Play an audio clip, spatial blend will be 0
| audioClip |
Definition at line 404 of file AudioPlayer.cs.
| IAudioPlayControlPromise DeBox.AudioRig.AudioPlayer.Play | ( | AudioClip | audioClip, |
| float | volume | ||
| ) |
Play an audio clip at a specific volume, spatial blend will be 0
| audioClip |
Definition at line 419 of file AudioPlayer.cs.
| IAudioPlayControlPromise DeBox.AudioRig.AudioPlayer.Play | ( | AudioClip | audioClip, |
| Vector3 | position | ||
| ) |
Play an audio clip at position, spatial blend will be 1
| audioClip | |
| position |
Definition at line 377 of file AudioPlayer.cs.
| IAudioPlayControlPromise DeBox.AudioRig.AudioPlayer.Play | ( | AudioClip | clip, |
| float | volume, | ||
| bool | loop, | ||
| float | spatial | ||
| ) |
| IAudioPlayControlPromise DeBox.AudioRig.AudioPlayer.PlayLoop | ( | AudioClip | clip | ) |
Plays the audio clip in a loop
| clip |
Definition at line 394 of file AudioPlayer.cs.
|
getprotected set |
Indicates the manager is initialized
Definition at line 338 of file AudioPlayer.cs.
|
staticget |
Returns the main AudioPlayer if such exists
Definition at line 343 of file AudioPlayer.cs.


Your First Progressive Web App Codelab
Get started at https://g.co/codelabs/pwa.
Get started at https://g.co/codelabs/pwa.
°F
Humidity:
%
Wind:
mph
°
Sunrise:
Sunset:
°
°
°
°
°
°
°
°
°
°
°
°
°
°


{% extends "base_map.html" %} {% load url from future %} {% load i18n %} {% load geoforms_extra %} {% block stylesheet %} {% endblock %} {% block content %}
Your input is important to us! One more way you can help is to share this survey with your friends, family and any one else who cares about the Columbia River Gorge.
{% trans "This is the end of the questionnaire and your answers has been saved. Thank you for your answers! You can still continue modifying your answers by clicking the previous buttons. Quit the questionnaire by clicking the 'quit and go to home page' button." %}
{% endif %}


First, find out who your upstream feed site(s) will be. If you don't know, then contact the Unidata Program Center at <support-idd at unidata.ucar.edu> with the following information:
Note that you can have a primary upstream site as well as an alternate upstream site for any given data feed.
This file tells an LDM what to do on startup. Several things that you should or might have in this file -- depending on your exact situation -- are.
request UNIDATA ".*" host1.site1.edu PRIMARY request NLDN ".*" host2.site2.edu PRIMARY
request UNIDATA ".*" host3.site3.edu ALTERNATE request NLDN ".*" host4.site4.edu ALTERNATE
Ask the administrator(s) of the LDM(s) at the upstream site(s) to add "allow" entries for your LDM to their LDM's ldmd.conf file. For example,
allow UNIDATA your.ldm.host allow NLDN your.ldm.host
To verify that the upstream authorization is in place, execute the following command:
notifyme -vl - -h upstream-site
This should print a list of products that the upstream site is receiving and that your LDM is allowed to receive.
This file tells the pqact utility how to locally process incoming data products. Options include filing the data product, executing a local program, and piping the data product to the standard input of a local program. If you're not going to process data products locally, then you don't need to edit this file.
For a detailed explanation about configuring this file, consult the chapter on pqact Configuration. Start with the pqact.conf file in the LDM distribution, and modify it to meet your needs. After any modification, check that the syntax of the file is correct by executing the following command:
ldmadmin pqactcheck
Edit the crontab(1) file of the LDM-user by executing the command crontab -e as the LDM-user. Then:
0 0 * * * bin/ldmadmin newlog
0 1,4,7,10,13,16,19,22 * * * bin/ldmadmin scour
$ cd $LDMHOME
$ ldmadmin stop
$ rm runtime && ln -s $VERSIONDIR
$ ldmadmin start
$ ldmadmin watch
We like to combine the above steps to minimize the time that the LDM is off-line:
$ cd $LDMHOME && ldmadmin stop && rm runtime && ln -s $VERSIONDIR && ldmadmin start && ldmadmin watch
Although boot-time start-up procedures vary amongst operating systems, each can be tailored to start the LDM. It is best to start the LDM as late as possible to avoid interfering with processes that could hang the system (e.g., the syslog daemon). One possible LDM script is:
p>export PATH=/bin:/usr/bin:/usr/etc:/usr/ucb LDMADMIN=/home/ldm/bin/ldmadmin case "$1" in start) if [ -x $LDMADMIN ] ; then $LDMADMIN queuecheck >/dev/null 2>&1 || { echo "Corrupt LDM product-queue. Recreating." /bin/su - ldm -c "$LDMADMIN delqueue" /bin/su - ldm -c "$LDMADMIN mkqueue" # /bin/su - ldm -c "$LDMADMIN delsurfqueue" # /bin/su - ldm -c "$LDMADMIN mksurfqueue" } echo 'Starting LDM using "ldmadmin start".' /bin/su - ldm -c "$LDMADMIN start" fi ;; stop) if [ -x $LDMADMIN ] ; then $LDMADMIN stop fi ;; esac
Consult the documentation on your operating system or with your system administrator for the details on how to incorporate this script (or something similar) into the boot-time start-up procedure of your system.


Chocolate Pizza
POSTED ON 15 DEC 2013 / DESSERTS
For the fig-swirl: Melt butter over medium heat in a saucepan. Add brown sugar and stir to dissolve. Halve all of the figs and toss in the saucepan with water and lemon juice. Cook over medium heat, stirring frequently, until you have a chunky-jajmny mixture. Add salt with one or two stirs, set aside and let cool completely.
Ice cream: In a small pot over medium heat, combine milk, and granulated sugar until sugar is completely dissolved and the milk is just barely lukewarm. Whisk in the egg yolks. Set mixture in the fridge and wait until the fig mixture is cooled.
Using an ice cream machine, pour liquids into the frozen basin and process according to manufacturer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, fig jam mixture, and the nuts. Continue to process for +/-10 minutes. Pour semi-frozen mixture into a pyrex dish or glass tupperware. Freeze for at least two hours before serving.


Hover Sound Effect
$(".sample-hover").on("mouseenter", function(){ $(this).uiSound({play: "hover"}); });
uiSound
Button Sound Effect
$(".test").click(function(){ $(this).uiSound({play: "success"}); });
Test the following button to listen sound effect.
Keyup Sound Effect
$("#input_test").keyup(function(){ $(this).uiSound({play: "keyup"}); });
Type something to test...
Alert Sounds
The following examples illustrates uiSound effects on various types of alerts.
Browser Compatibility
Best result in Google Chrome and Firefox. Older browser are not supported.
How to use
You can trigger sound effect on any event (including custom events) and in any jQuery function. There is the same method to initialize the uiSound plugin inside the various types of functions.
The method is:
$(this).uiSound({play: "sound-name"});
The following is the list of built in sounds, however you can also add your custom sounds.
Just write the name of the sound whenever you want to play.
- beat-click
- beep
- bold-beep
- button-beep
- change
- click
- connected
- cursor-click
- danger-alarm
- danger
- device
- disconnected
- double-click
- electric-beep2
- error
- hover
- info
- keyup
- processing
- readout-beep
- scanner
- scifi-beep
- slide
- success
- system-alarm
- timer
- warning


{% extends "base.html" %}
{% block head %}
{% endblock %}
{% block content %}
Network Graphs
Graphing Barabási–Albert and Watts-Strogatz Models Dynamically
In Network Science, the study of network connections and how they develop, there are several predictive algorithms designed to model a network mathematically. There is a rich history to this dating back hundreds of years, with mathematicians, physicists, and even psychologists creating models to represent different types of networks and how they grow and connect.
These mathematical algorithms or equations can be difficult to visualize, and so they are usually represented by Random Graph structures that follow these established formulas or models. It's possible to see what a real world example would look like using a JSON file with 4038 nodes to simulate what a Facebook Network would look like visualized.
Two of the more well known models are the Barabási–Albert preferential attachment model and the Watts-Strogatz small world model. The Barabási–Albert model treats some nodes as “hubs” who have many more connections or degrees than other nodes, and new nodes tend more likely connect with the bigger hubs. The Watts-Strogatz has a probability it takes into account on nodes connecting with neighbors. And so the Barabási–Albert model is more focused on the size of the hub nodes and attributes, while for the Watts-Strogatz model it is the connections and how they appear relative to its neighbors.
Below are the two models, Barabási–Albert followed by the Watts-Strogatz. You can input how many nodes and edges you’d like the Barabási–Albert model to show with the caveat that you must put more nodes than edges, and nodes are limited from 2 to 100 and edges 1 to 50. For the Watts-Strogatz model, you have control over how many nodes, nodes connected, and the probability of neighboring connections, limited from 2 to 100, 1 to 50, and .00 to 1.00 respectively, though you must have more nodes than nodes connected, similarly to the B-A graph.


class: center, middle, wtbg ## Sharing Bandwidth With # 🎉 WebTorrent 🎉 (Press P notes) --- class: center, middle, purplebg ### Georgiy Shibaev Freelancer - _Mauve Software Inc_
(Hire me!)
@RangerMauve [Mastodon](https://infosec.exchange/@RangerMauve) [GitHub](https://github.com/RangerMauve/) [Twitter](https://twitter.com/RangerMauve) --- class: center, middle ## 🤷♀ Centralization 🤷♂ ??? In order for any of this presentation to make sense, we should look into what our current approach to data is. --- class: center, middle ### 🌟 Star Toplogy 🌟 ??? Let's talk about application network topologies. --- class: center, middle ![Example of star topology, a single computer in the middle, with several phones all connecting directly to it](star.svg) ???  At the center you have a hub, and it's surrounded by spokes. In the case of the web, the hub is the website or the servers, or cloud stuff being hosted by the service provider, and the spokes are the clients actually accessing data. So, in the middle is the provider, and we're all around it. --- class: center, middle ![A star topology with two smiley faces with a highlighted path between them to show that they're connecting through the hub](star-connection.svg) ??? If you want to share data with somebody, you first need to go through the central hub The more popular a service is, the more load is has to take on. For example, you might have a small blog where you like to post about your cats, and suddenly a video of your cat goes viral. --- class: center, middle ![A star topogy with more phones connected to the central server](star-heavy.svg) ??? Now you have waay more people connecting to your website, and every single person is downloading your entire cat video or whatever else you have on there. --- class: center, middle ![Star topology where the hub in the middle is dead, all the other connected clients are angry faces](star-dead.svg) ??? Eventually, servers go down. And when a server goes down, whatever data they represented, or whatever service they provided, goes down with them. That's why when Slack or Github go down, we suddenly have hours of productivity loss. "So what?", you might be thinking, "That's why we throw more servers at the problem and have more capacity for higher load, it's something we deal with, and there's no way around it if you want to build services" --- class: center, middle ## ✨ Mesh Topology ✨ ??? Well, what if you could structure your application differently to work around these limitations rather than throwing more money at the infrastructure? --- class: center, middle ![Mesh topology, there are 9 computers, and they each connect to one or more other computers, formight a mesh](mesh.svg) ??? Here's another way you can distribute data. This is called a mesh toplogy. Mesh in the sense that there's a bunch of connections forming a sort of fabric. There's no central hub for clients to connect to, everyone is getting data, and sharing it with it's peers --- class: center, middle ![A mesh of computers, with two of them being smiley faces. A purple route is highligted that goes from one smiley, to a computer it's connected to, and to the other smiley that's also connected to that computer](mesh-connection.svg) ??? For example, we could have two people share some data with each other through a route in the mesh --- class: center, middle ![A mesh of computers, two smiley faces have a route highlighted, but the computer between them is dead](mesh-dead.svg) ??? Now, what if that route was suddenly broken? Maybe the intermediate node got overwhealmed, or went offline. Suddenly we're in the same situation as the star topology, we can't exchange data! --- class: center, middle ![Same mesh of computers as before, but the dead computer is missing and a new route has been highlighted between the smiley faces](mesh-reroute.svg) ??? Well, since there's still connections left, we can take a different route and everything will work just as before. This shows how a mesh network is a lot more resiliant to downtime right out of the box. You get the load balancing features that we need to set up with the centralized web, but it's done automatically across clients rather than your own infrastructure. --- class: center, middle ![A mesh of computers. There are two sunglasses smiley faces and they both have routes to a smiley face with stars in its eyes](mesh-multiple.svg) ??? Notice that we could have multiple routes at once, or might be connected directly to the device we want to load from. This gives us better speeds by loading from multiple peers in parallell. --- class: center, middle # 😎 Cool 😎 ??? So now that you know some of the reasoning behind distributing the load, lets look at how we can actually do something with these ideas. --- class: center, middle ![BitTorrent logo](Bittorrent_new_logo.svg) ??? So, I'm sure some of you have used BitTorrent before. Either conciously for downloading large virtual machine images, or embedded inside launchers for MMO games to help with performance when downloading patches.  WebTorrent is an implementation of BitTorrent that works on the web. It uses WebRTC to make connections to other computers that have a website open in order to share the load for media that's embedded within it. It's all open source and the various pieces can be reused for any custom behaviors that you might want if the default implementation doesn't satisfy you. --- class: center, middle, wtbg ## 🧩 Creating a torrent 🧩 ??? So, how do I use this complicated "Torrent" thing anyway? Something this complicated must involve a lot of steps to use! --- class: center, middle ```shell npm install webtorrent-hybrid -g webtorrent-hybrid seed ./somefolder ``` ??? Well, it's actually not as crazy as you'd imagine. All you need to do is make a folder with your files, run the webtorrent CLI on it, and copy the magnet link. --- class: middle ```shell Seeding: ./somefolder Info hash: 6bdc5c71fb40a737714634a0a0ce168e88860f54 Speed: 0 B/s Downloaded: 990 KB/990 KB Uploaded: 0 B Running time: 22 seconds Time remaining: N/A Peers: 0/0 ``` ??? Then, leave the process running so that peers can connect to it to download the files. If you want to get fancier than that, there's a Node.js JavaScript API that you can use to have whatever behavior you'd like. Now, see that thing that says "Info hash", that's a unique identifier for your torrent on the network. --- class: center, middle ### Magnet URI
magnet:
?xt=urn:btih:
08ada5a7a6183aae1e09d831df6748d566095a10
??? That infohash is taken and shoved into a special link called a Magnet URI. The way BitTorrent works is it takes all the data in your folder, looks at the contents of the files, and creates the "infohash" by running the data through some fancy math. This infohash is then put in the magnet link, and is used as an ID to identify peers with the torrent. It's also used for verifying that the data you're downloading from a peer is valid. If a peer tries to send you a file with something sketchy in it, that file will have a different infohash and be discarded by your torrent software before you're exposed to it. --- class: center, middle, wtbg ## 📺 Embedding Videos 📺 ??? Ok, so now we're BitTorrent experts, but how do we actually use this stuff with a website?  All you need to do to load one of these torrents is add a script tag to your page, and now you'll have a new custom element that lets you specify the magnet URI of the torrent, and the name of the file you want to load. From there it will find peers that have the torrent, load the file from them, and render it out on your page. --- class: center, middle
--- class: center, middle, purplebg ## 🌱 Seeding 🌱 ??? Now, in a peer to peer network, you need to have at least one peer out there that has the content, otherwise there's no way to download it. With that in mind, you have two options: --- class: center, middle ## CLI ```shell webtorrent-hybrid download magnet:?xt=urn:btih:WHATEVER --keep-seeding ``` ??? Earlier, I showed you how to create a torrent from a folder. Here's how you can load a torrent you don't have yet and share it to the network. This does the same thing as loading the torrent in a clients browser, but it stays online for as long as you keep running it. This is different than having a centralized node because it doesn't have any special permissions and as more peers load the content it'll be less and less important. --- class: center, middle ## WebSeed ```shell webtorrent-hybrid seed ./somefolder \ --urlList 'https://cdn.example.com/file.mov' file.mov ``` ??? Of course, running some sort of Node.js command line utility might not make sense for your use case. There's an easier way for you as a content creator to make sure that the content is loadable, even if there are no WebTorrent peers online that have a copy of it. And thats... regular old webservers! When you create a torrent, you can specify HTTP URLs for files in the torrent. That way you can have a folder on your webserver with these files, and peers will reach out to it to download them. --- class: center, middle, cfbg ### Content Delivery Networks (CloudFlare, Akamai, Etc) ??? Now, distributing large amounts of content is something that we deal with every day when developing websites. And there's already a tried and proven solution for this issue: Content Deliver Networks. They work by having servers distributed across the globe which keep a copy of your files. Then, when a client wants to load your content, they'll load it from whichever CDN server is closest to them geographically rather than your main server. This is great, but it costs money, and you need to trust that CDNs won't start imposing extra restrictions and that they won't invade your users privacy. The cool thing is that you can use both! Use CDNs as your webseed, and have WebTorrent for sharing load further. --- class: center, middle ![PeerTube logo](PeerTube.png) ??? PeerTube is a decentralized alternative to YouTube. PeerTube uses a spec called ActivityPub to allow different instances to talk to each other. Think of it like being able to post a video on Tik Tok, and have somebody from Instagram able to view and comment on it without having to leave their app and make another account. PeerTube uses WebTorrent with videos hosted in instances in order to share the bandwidth amongths the viewers and make it more feasible for communities to run their own PeerTube instances. --- class: center, middle, purplebg # 🎉🎊 End 🎊🎉