Hello beautiful people. I am super excited to let you know that yesterday. I went up to Denver and picked up my carbon fiber leg Try smiling Look at you Jordan your new carbon fiber rocket leg See it's a super shiny and pretty and is going to be So much lighter than the plastic when I was wearing before now I got to design this one. It is not Super white on the inside but is enough so that I'll be able to put the sayings in there Like I was talking about and smells super nice I'll try not to inhale fumes too much But I am actually getting ready to leave on my first trip as an amputee today And so I am struggling finishing packing and trying to think of all the things that I don't need to bring I understand that I'll need to leave a little bit early to get through airport security with this bad boy in case Airport security doesn't like a metallic leg I will definitely be bringing my crutches still because I cannot walk full-time on This leg I am able to walk on it a lot more than I thought it would be it's a lot more comfortable than like the thick plastic leg I had before and I thought I would walk you through extra things that I'm packing for the trip It's only a 40 trip to the best place on earth I know you're thinking like Disneyland Terrace the Bahamas, Indiana Some of my best friends live there And so I'm just so excited that Brian's taking me away and we're gonna go Get away from reality for the while which seems a little bit necessary right now So I'm hoping that I'm remembering to bring everything because once I'm gone I'm gone One thing I'm definitely bringing with me is a lot of socks These are What you put on the end of your leg as it changes shape throughout the day. These are all different sizes It's kind of annoying to stop and change socks throughout the day because it's like a process to put my leg on and off I know that I'll get faster as I get used to my leg Um, I'm bringing electrical tape because things are so advanced that there are actual pieces of my leg that are just Electrical tape so we bring extra tape just in case anything needs to be taped up Also a piece of a hose because there's a vacuum pump Working this leg and how it's actually sticks on to my leg And so they gave me some extra hose just in case anything happens We can use these guys in conjunction To stick me back together when I took final delivery of my leg They had me signed for like the full amount even though insurance Helps out a lot. This is why you have insurance guys Because this is almost $17,000 leg without any help from insurance so so so so So insanely grateful. I do not have to pay for that By myself. So thank god for good insurance I think I'll uh keep this as a memento of a token of my gratefulness and I am super glad I went through this With you guys because I did not pack something. I am Probably most nervous to get through like the first flight because I'll be wearing my leg for let's see here Probably like six hours straight and the longest I've done so far is like three So it's not like I can't take it off mid plane ride But how weird would you feel if you were sitting next to someone and they just like like Yanked their leg off. I just don't want to make I don't want to traumatize someone like that So I'll definitely be keeping it on plane And hopefully make it to indiana without too much pain. Just realized I'm missing something else. Hmm one sec. That's fun It's where there was another There are these cool things in this cool bag that I could put in the bottom of my leg if it felt like it was like If I needed To get higher I'll find them somewhere in any case. I have to go get ready for my cousin's 40th birthday party Up in denver. She's having a roaring 20s party in case it didn't appear this way Brian and I are not really costume people, but I'm very excited to be celebrating with her So I'm gonna get dressed up as a 20s flapper girl Not a super elaborate costume, but at least I get to look pretty for a day. You know feel pretty and Brian is going to wear a bowler hat. I think that's what it's called Yeah, so minimal effort into our costumes, but maximum effort into celebrating my dear cousin so we're gonna have there have some fun and Get on a plane the next morning and head out to indiana and cross my fingers tsa does not have an issue with this leg I found it. Okay. So there are these little pieces That you can put in the bottom of your leg. You like drop them in the top Hey, you just pop this in the top of your leg and it gives you like that much more Lift if you feel like you're sinking down too much. So that was the last I don't actually want this in there. That was the last piece. I needed to figure out to bring And I think I'm set guys. Uh, we're just arriving at the airport and Ready to get my first flight with my handy dandy new leg, which I've discovered is a terrible idea to try to put it on the car But hopefully tsa will let me through with it This handsome man over here has been fabulous at getting me in and out of the hotel thus far with it Everything doesn't need to take 10 times longer when you're trying to walk with a metal leg True security You're amazing. How uh shockingly it actually wasn't that exhausting We did however make the terrifying mistake of not eating breakfast. So now we're stuffing our faces in the pretzels One perk of being on a d on blank is that they let you board first. So a couple more minutes and we'll be safe on the flight


Well, we had been anticipating the release of the document and looking forward to it. And we had already briefed our general counsel's office that the document was coming and had told them that as soon as it came out, we wanted to meet with them because we expected to use that as a guidance and to be very aggressive in using it as a guidance. And so when it came out, we immediately forwarded it to them and scheduled a meeting and it was a very positive meeting. But they were a little surprised because I told them that I considered this document the floor from which we would then, below which we would not go, rather than a ceiling under which we would stay. And that did cause them, I think, to take a moment to sort of think about, do I need to reread the document? But they did, I think, essentially feel very comfortable with it. And they agreed that if we had specific projects, particularly large-scale ones, where we were going well beyond what was explicit in the document that we would bring it back to them and discuss it with them on a case-by-case basis, but essentially said they were very comfortable with our proceeding. I think we've always been a lot more willing to take risks, but their whole job is to keep us out of court. It has helped us to realize that it really is not risky to look carefully at these things and recognize that they're transformative and to defend, if you will, and extend the rights of our authors and the rights of our users to access our materials. Yeah, we've had a number of internal meetings and discussions. We've still got a few staff who really would very much like to have numbers. And every time they send a draft up that has a number in it, I scratch it out and send it back and say, no, no, I know it is harder. And I mean, that's part of it. It takes longer to look at cases individually and really examine is this case transformative and that case isn't. So some of that I think is just looking for something that's quick and easy because they're handling a large volume of requests, particularly when it comes to the electronic reserves and that kind of thing. But I think in terms of their managers and certainly from their managers up the food chain, I think it's helped everybody's level of comfort and assurance that they can do more and should do more. Well, we certainly have a very large scale digitization program. And so in looking at all of our digital projects, we've been kind of reexamining the criteria that we were using and I think being less conservative, more aggressive. I don't know how you want to frame that. You know, being a little more risk taking about what are we doing and looking at some of the other case studies of things that people have done, trying to really carefully understand transformative use and to think really more carefully about is this a transformative use and finding that there really is a lot more transformative use than we have been letting ourselves think about. And so I think it's really having its biggest effect there as we're prioritizing digitization initiatives to really be more expansive in how we define what we're doing. We have implemented, though not directly as a result of the code, but reinforced by the code an Orphan Works policy for one of a better term for our own electronic theses and dissertations. So we're doing a retrospective digitization and we're doing that with a, you know, we're notifying you if we know how to find you and we're making public an ability for people to say, no, no, I found you and I don't want you to have my dissertation up, but that we're being aggressive about some of those kinds of things and, again, with more confidence, I think, in moving forward. And I think the decision yesterday on Hathi Trust will embolden us further in terms of feeling that we now have the courts really acknowledging library's role in scholarship and research and teaching and how fair use fits into that in a very legitimate way.


What's up everybody? Jason here for jatsby's case breaks calm. This sells off flawless football guys 2020 To box case break page 18 the random number block that includes 11 teams in this break guys Eagles Cowboys Viking Steelers Washington football team Raiders Colts Rams Bills Broncos and Jets and again guys You guys get a piece of all of these teams for 330 and again It goes by serial number left side of the first number on the left side of the show number dash first number And again you get a random number from zero through nine and of course you guys need the example there It is right there again first number next to the dash on the left side of the certain dash So here's the dice roller is the customer names Matthew down to Matthew You got zero through nine. Good luck guys roll it and we got a two and a one three times One two Three all down to Matthew and again I put the teams right there just so you guys can see the teams if you match up with a team That doesn't mean you have the team. That's just for the sorting purposes All right, so three times there One Two three zero down to three and again so Paul you have zero So if there is any redemptions with any of these 11 teams You'll get them Matthew with two Andrew with eight Matthew with four as well as one So Matthew any one of ones for the teams of yours Brian with seven Matthew with nine and six Brian with five and Matthew with three So coming up next guys is the break itself. Good luck everybody


Item number SCP-250, Object Class, Euclid. Special Containment Procedures. SCP-250 is to be kept in a 50 meter by 50 meter enclosure, simulating a prairie environment, with padded steel walls 15 meters high and 1 meter thick. The temperature must remain between 20 and 28 degrees Celsius by day and between 10 and 14 degrees Celsius by night, with an average humidity of no more than 8%. This serves the dual purpose of ensuring that SCP-250's overall behavior remains predictable, and of maintaining the physical integrity of its component parts. Vegetation within the enclosure is to be maintained on a weekly basis. Although SCP-250 does not physically require nutrition, it is to be fed one live adult pig every two days in order to regulate its aggression and hunting instincts. The remnants of its meal are to be removed from its enclosure no less than one hour after the onset of its nightly dormancy period. This includes cleaning any residual biological debris from SCP-250's physical components with compressed air and whisk brooms. At no point during cleaning are any of SCP-250's physical components to be moved by more than 1 meter in any direction, as this risks disrupting its dormancy. Dormancy ends within 5 minutes of sunrise. Access to SCP-250's containment during its activity period is prohibited. Description SCP-250 is the animate fossil skeleton of an allosaur, originally identified as Allosaurus fragilis. However, an incomplete scientific article found in the personal effects of paleontologist Dr. R. P. indicates that this classification may have been erroneous. It consists of 153 disarticulated bones and 14 plaster and fiberglass replacements held together and animated by an unknown force. Study of this force is hindered by SCP-250's aggressive behavior, which has been assessed by Foundation paleozoologists as being well within theoretical norms for an Allosaurus. SCP-250 emulates what are presumed to have been the standard daily activities of a living Allosaurus. It wanders its enclosure by day, enters a state of dormancy by night, and will attempt to kill and devour anything which it perceives as suitable prey, including humans. Its lack of organs does not seem to affect its behavior in any way, except in that the remains of any prey it consumes will inevitably fall out of the gaps in its skull, neck, and ribcage, at which point it ignores them. SCP-250 was first excavated as an 80% complete skeleton in 19 records from the excavation do not include any report of anomalies. Several years later, it was transferred to an undisclosed museum of natural history in where it was assembled, mounted, and put on display. On the night of SCP-250 seized and killed an intruder to the museum, although damage to the intruder's remains was so extensive as to render forensic identification impractical, they were conclusively shown to not be those of paleontologist Dr. who's office in the museum was extensively vandalized that night and who has not been seen since. Foundation personnel embedded within museum staff reported the incident and SCP-250 was taken into custody. Item number SCP-291 Object Class Safe Special Containment Procedures SCP-291 must remain disconnected from any power source when not in use for testing. A team of two personnel should remain on guard outside SCP-291's containment room and will be swapped out weekly. While disconnected from a power supply, SCP-291 may be considered safe. SCP-291's main entryway closes and locks upon disconnection from a power supply, but the door may be opened manually from the interior in the event of any personnel being trapped. All blocks of disassembled organism are to be kept stored in a designated storage locker within the containment room and are to be properly labeled with a sharpie marker. Personnel responsible for lost or damaged blocks will be moved to other projects. Description SCP-291 was located and data expunged. SCP-291 resembles a small building in structure, a nearly featureless steel box, measuring 10.5 meters by 30.2 meters at the base and 15 meters tall. On one of the narrow sides, there is a large door, five meters wide, that opens upwards, similar to a garage door composed of metal slats a few inches high each. There is no handle on the exterior of the door and while closed, all attempts to open it using non-destructive methods have failed. The interior of the door features a lock that can be opened manually to lift the door for a few seconds before an unknown mechanism will force it shut again. At the other end of SCP-291 is a similar opening with a lock and handle on the exterior and interior, allowing the door to be opened from either side. Two small similar hatches, only one meter by one meter, can be found to the left of both doors and may be opened from the exterior. The materials that compose SCP-291 do appear to only be as strong as any other example would suggest, and a force that would normally bend or cut through steel will do the same to SCP-291. Such testing is currently not allowed due to the risk of damaging SCP-291. The interior of SCP-291 is not well explored due to the extremely tight confines of the machinery and strong pulses of electromagnetic energy throughout various points while activated. When connected to a suitable power source, SCP-291 activates with mechanical clanks and buzzing and the entryway door springs open. The room inside is four meters by two meters with a rather simple console board, a large display screen and what has been described as a plexiglass coffin to one side, suitable in size for most humans under 2.13 meters or seven feet in height, who are not morbidly obese. The coffin rests on a conveyor belt a meter in height, the coffin itself being approximately a meter deep with a blue-green gel cushion of unidentified material lining the bottom. It has been described as pleasantly form-fitting and very cool and soft. Several tubes emerge from the side of the room over the coffin. Opposite the coffin, a number of cubby holes of various sizes with small doors that may be opened or closed are present on the wall. Their purpose shall be elaborated upon later. When a living animal, human or otherwise, is laid in the coffin, dead organisms, organisms with a mass of less than 1.6 kilograms and groups of multiple organisms triggered no reaction. No matter their position, the control room moves into the ready state. In this state, the display screen shows a scanned, grid-lined image of the organism in the coffin and the buttons on the console board become operable. Some of the smaller buttons will trigger different effects in the displayed image, such as toggling the skin and muscles of the display on and off and revealing certain organs and organ systems, whether in real time or frozen depending upon more settings. There are no words, numbers, or symbols on the display or any of the buttons, and all buttons have two settings, on in which they glow and off, in which they are unlit. Various combinations produce different effects, and Dr. Wright's has been kind enough to spend enough time playing with it to work up a crude user's manual. Three large buttons, visibly different from the controls for the display, are available to the side. Provided that a living organism is lying in the coffin, the first button may be pressed, pressing any buttons under any other circumstances yields no effect, and the button remains off, no matter how many times pressed, and the tubes extending over the coffin dispense a blue liquid into the coffin. This unidentified liquid acts as a sedative upon skin contact, and the occupant of the coffin quickly falls unconscious. The liquid can apparently be inhaled and swallowed without any harm. D-class personnel have reported the taste to be similar to Kool-Aid. Samples have yielded little results in identification. Once the coffin is filled to the brim, the liquid quickly congeals into a thick syrup, and then to a solid gel. Over this period, the occupant's detectable bodily functions, such as breathing and heartbeat, cease. This may be observed on the display screen. Once the liquid fully solidifies, the display screen shuts off, and the conveyor belt starts to move. All attempts to stop the conveyor belt and remove either the coffin or the occupant causes the entire process to shut down, after which the blue liquid evaporates within a few minutes, and the subject regains consciousness, unharmed. The conveyor belt carries the coffin in occupant through a small door that quickly locks closed, and the entire machine becomes a cacophony of mechanical clanking, worrying, and grinding. The display screen will only display a rectangle that slowly fills, like a loading bar, as SCP-291 does its work. Depending upon the size of the organism, SCP-291 finishes its as-of-yet unknown process in approximately 20 to 30 minutes, at which point. The product can be retrieved at the opposite end of SCP-291. The back door of SCP-291 leads to a similar chamber, also containing a conveyor belt similar to the one that holds the coffin in the entryway. There is also a series of two dozen cubbyholes or lockers, identical to those found in the entry room. These cubbyholes may be pulled out to retrieve their contents, parts of the organism, disassembled, and preserved in blocks of an unidentified clear solid. These blocks are quite strong, but they can be melted by extremely high temperatures, or shattered by sharp blows from a pick. However, breaking the blocks ruins the preservation method of SCP-291, and results in the preserved object being unusable. The rest of the block quickly begins to dissolve into dust after a few minutes. Hole blocks, however, may be stored indefinitely until being reinserted into SCP-291 via the cubbyholes in the entrance room. Each block has a distinct size, and will only fit snugly in its designated hole. Placing blocks in the wrong holes gets no reaction from the machine, and will prevent it from being reactivated until the problem is fixed. Cubbies may be left empty, however, and it will function as normal. It is ill-advised to leave a cubby containing a vital organ empty. When the blocks are placed correctly and the doors to them shut, the second button on the console may be pressed. This does not work if the display shows a loading bar, as another operation is taking place. The doors to the cubbyholes lock after a few seconds, during which SCP-291 removes them through some means, and the machinery of the device grows louder, accompanied by another loading bar on the display screen. Reassembly takes slightly longer, approximately 40 to 50 minutes to finish, after which a plexiglass container, similar to the initial coffin, emerges from a door on the conveyor belt in the exit room, holding a fully assembled organism immersed in blue liquid that slowly evaporates as the organism wakes. Reassembled organisms have no memory of the process, likening the experience to a very restful, dreamless sleep. They awaken with some slight disorientation, but this passes after a few minutes, and they complain about being very hungry. Tests reveal that they are reassembled with their stomachs empty. Organisms are also reassembled nude, and devoid of any hair. A block containing what has been identified as the contents of the organism's digestive system, hair, scraps of clothing, and any other objects on the organism is deposited into one of the small side doors outside the main doors, and may be considered waste. Surveillance and scanning equipment sent inside the machine is disposed of in the same way, often twisted and wrecked. Later testing revealed that organisms can be reassembled in different, potentially malicious ways. The third button is only to be used should something go wrong when the production stops and the button blinks. It undoes whatever has been done the best it can, and shuts down the whole process, while triggering some kind of cleaning and reset method. Addendum. Blocks are clear, and therefore the organs and body parts contained within may be easily identified and observed. The body is divided up like such. Brain. Lungs and diaphragm. Heart. Digestive system. Reproductive organs. Left eye. Right eye. Upper left torso and arm musculature up to the elbow and various organs. Upper right torso and arm musculature up to the elbow and various organs. Lower left torso and upper leg musculature in various organs. Lower right torso and upper leg musculature in various organs. Lower left leg and foot. Lower right leg and foot. Lower left arm and hand. Lower right arm and hand. Neck and head musculature and various organs, skeletal system from mid-spine up, skeletal system from mid-spine down, lymphatic and circulatory system from waist up, lymphatic and circulatory system from waist down, skin neatly folded, testing results, reassembling a body without vital organs results in the production shutting down, requiring the use of the third button. The body will be re-deposited and block form at the exit, still inert. Reassembling a body without non-vital organs or body parts will result in that organ or body part being absent when the organism awakens, the wound sealed by unknown means that leave little to no scar tissue. Providing a body part for a missing body part will result in said body part being attached to its new body seemingly without fail. It has proved effective for heart transplants, limb transplants, and exchanging skin from one person to another. Swapping the brains of two people results in a complete transfer of that person's personality and memories, and may be reversed, although subjects are often very disoriented for several days and complain of psychological and physical discomfort, like wearing shoes not quite the right size. Swapping body parts between different species has yielded mixed results. Dr. Wrights has suggested that testing continue and the request is pending. Only three successful cross-species transfers have occurred out of the twenty tests performed so far. 001 A cat's left eye was swapped out for a human's left eye. The subject could use the eye fully and mentioned they felt they had adapted to it rather well. Their new left eye displayed all the abilities of a cat's eye, including difficulty seeing colors and heightened perception in the dark. Although this test was unauthorized, the results were considered to be mildly impressive enough to allow further testing. The cat, given a human eye, clawed its human eye out in a week. 007 A human's brain was successfully transferred into the body of an English mastiff, reportedly thanks to the dog's large skull size. He requested to be transferred back to his human body as soon as possible though. The mastiff, in the human's body, learned to walk up right within a few hours and was disassembled again after an incident involving the humiliation of a female doctor. 006 A female class D personnel had her reproductive organ switched with those of a...pregnant Labrador Retriever. No tests involving using SCP-291 with other SCPs have yet been authorized. 007 Item number SCP-308 Object Class Safe Special Containment Procedures SCP-308 is stored in a sterile containment module with restricted access. Dental entering the room must observe level 1 isolation protocol and will be remotely observed by security personnel for the duration of their visit. No organic material may be placed in SCP-308 without level 4 authorization. SCP-308 will remain open unless involved in active experimentation. Description SCP-308 is an ornate funerary casing of Aztec origin, dated roughly 500 years old, with dimensions 1.8 meters by 0.9 meters by 1.2 meters. It was found at the...archaeological excavation, among similar, though mundane, artifacts in a temple complex. SCP-308 is covered in Nahuatl pictographs, consistent with ceremonial practices of its time, though unusual in the care and expense devoted to them. Under normal conditions, the artifact is inert, but it exerts an animating effect on organisms when they are placed inside it. The effect was first observed in the original inhabitant of the coffin, data expunged. The poor condition of the individual has been attributed to its 500 year incarceration in the casing without nourishment or stimulation. Healthy, injured, or even deceased subjects are transformed by the artifact. Regardless of the condition of an organism prior to placement in the coffin, with one exception, the creature will exhibit certain traits upon removal. Superficially, subjects remain unchanged, retaining injuries and conditions sustained prior to exposure. Despite the nature and seriousness of such trauma, however, subjects appear alive and responsive to the extent the injuries allow. For example, a subject exposed to a fatal dose of cyanide in excess of 100 times the fatal dosage, conversed normally, respired, and displayed vital signs such as heartbeat and brain activity. The subject also presented classical symptoms of acute poisoning, including shortness of breath, drowsiness, headache, and cyanotic skin, but did not succumb even after a period of many days. Another subject was pierced in several major arteries and exsanguinated before exposure to SCP-308. A subsequent examination revealed a heartbeat, but no discernable blood pressure, and the subject was conversant, though conscious of great pain in the injured areas. Subjects in this altered state will neither succumb to any injury, again, one exception, no matter how severe, nor heal any wound, no matter how minor. In addition, they display a dependence on the artifact similar to addiction, insisting on regular exposure, and becoming erratic and violent when this is withheld. Subjects experience pain normally, and many who have suffered extensive damage will rapidly deteriorate psychologically. Progressive conditions, such as cancer and infections, continue to advance in subjects exposed to SCP-308, though instead of dying, they suffer from ever-escalating symptoms. The only thing that a subject requires to be affected by SCP-308 is the presence of a heart. Subjects with a wounded or diseased heart are animated, as are portions of organisms or tissues connected to a heart. Individuals with their hearts removed, or body portions without a heart, are unaffected by exposure to the artifact. Even an isolated heart, placed in the container, will resume beating at a normal rhythm. Subjects exposed to SCP-308 remain alive and essentially unkillable, until their heart is destroyed, whereupon they succumb and decay normally. Because of the nature of SCP-308 and the apparent psychological effects it exerts on subjects, all exposed individuals must be isolated and terminated at the conclusion of testing. Temporary use of SCP-308 to debrief deceased personnel permitted by level 4 authorization only. Experimental log, 308A, excerpts Subject, Canis lupus familiaris Condition Healthy Summary of results Subject apparently normal, showed typical pain reaction, but survived repeated laceration, evisceration, exsanguination, burns over 90% of body surface, multiple gunshots, electrocution and lobotomy. Subject terminated by blunt impact trauma destroying the heart. D-4395 Condition Stage 4 Small Long Cell Carcinoma Summary of results Subject continued to worsen post-exposure. Regular breathing ceased 3 days after exposure, due to extensive tumor growth, but subject retained consciousness. Tumor infiltrated renal system, leading to external growths approximately 13 cm in diameter in the area by 14 days. Secondary tumors occlude vision and infiltrate the brain by 19 days. Upon the final ceasing of biological function in 52 days, metastatic tumors were evident over 70% of the body's surface area and had infiltrated every organ system, including the heart, which was the cause of subject's death. Subject D-34892 Condition Head and heart surgically removed from the rest of the body, keeping attached vasculature intact. Summary of results Subject revived and apparently conscious, though apparently in too much pain to communicate meaningfully. Applied painkillers had no visible effect. Research ongoing. Subject Agent D-4395 Condition Terminated in the line of duty, recovering SCP- Summary of results Animated for debriefing Subject requested and was granted two weeks to prepare a post-action report before termination. After nine days, subject's nightly request for access to SCP-308 was denied. The following morning, subject escaped containment by murdering a technician and proceeded to SCP-308's containment area, where she was terminated by guards on station with a bullet to the heart. Subject D-34877 Condition Expired from myocardial infarction Summary of results Subject was recovered from the artifact, inert, with massive trauma to the chest, through which the heart had been expelled or ripped. The heart was beating regularly, but the subject's body showed no signs of life. Subject's medical background indicated that he had received a heart transplant three years prior. Item Number SCP-321 Object Class Safe Special Containment Procedures SCP-321 is to be kept in a regulation containment chamber. SCP-321 has been outfitted with extensive braces to make up for weaknesses in bone structure and muscle mass. Its artificial heart is to be examined once a month for any damage. SCP-321 is to be fed three times daily. Solid foods are excluded from its prescribed diet. Three staff members are on temporary SCP-321 assignment at this time. SCP-321 is to be given three hours a day of exercise and physical therapy, with the rest of its time not involved in experiments to be confined to its cell. While SCP-321 is incapable of asking for anything, it has been allowed several stuffed toys. Description SCP-321 is a human female, born on July 4th, 18- SCP-321 is currently 3.1 meters tall and weighs approximately 110 kilograms. Subject is devoid of melanin in hair, eyes, and skin. It is incapable of speech, but can still vocalize, and has proven to have problems with spatial recognition and awareness. SCP-321 has displayed a low degree of intellect, and has problems adjusting to new situations. SCP-321 was the stillborn child of junior researcher Adam and his wife, medical assistant Evelyn R... Junior researcher R took it upon himself to make use of several SCPs, including SCP-590, in an effort to bring his daughter back to life. The procedure worked, but the result was taken into Foundation custody for examination. The subject was later given an SCP designation. SCP-321 was quickly found to have recuperative abilities, capable of healing injuries inflicted upon it at approximately five times the normal rate. Subject was at this time entered into Foundation records as SCP-321. In the time since, SCP-321's body has continued to age at a decelerated rate, approximately half that of a normal human. Although its aging has been slowed, SCP-321 has continued to grow, showing no signs of stopping, despite now being taller than any recorded human. At this point in time, it is believed SCP-321's recuperative abilities stem from overabundant production of stem cells, a result of its interaction upon death with expunged. For a period of time beginning in early 19... The limits of SCP-321's natural heart were reached, and SCP-321 was too tall for blood to be circulated properly. During this period, SCP-321 was restrained physically in order to keep its heart capable of pumping blood to the brain. Despite this, slow decay was evident, and the limits of SCP-321's recuperative abilities were found, as it was not capable of healing damage that was being dealt constantly. Work began in 1948 to create an artificial heart to prolong SCP-321's existence. The heart was completed in 19... Since then, all damage done to SCP-321 has been healed. SCP-321 has a very low intelligence. Everyday activities are a chore for it, and it can take several months to years to teach it to do such things as use utensils for eating. While SCP-321 has fully developed vocal cords, it seems incapable of learning speech, instead crying and making nonsense noises, as of those typically heard from infants under the age of six months. Sly 31st, 18... Requesting SCP-321 be removed from SCP status, Junior Researcher Adam. Request denied, 05... January 10th, 18... Requesting SCP-321 be removed from SCP status, Personnel Director Adam. Request denied, 05... Day 3rd, 19... We can learn nothing more from SCP-321, suggesting we remove its SCP designation. Site Director Adam, Site 4... Request denied, 05... June 31st, 19... SCP-321 is to be decommissioned and returned to her family, effective immediately, 0512... Request denied, this is the final time Adam. She is not now, nor ever has been, your daughter. If you attempt this again, I will gather the council and you will be removed. 05-1... Item number, SCP-331, Object Class, SAFE, Special Containment Procedures. When not being used, SCP-331 is to be kept within a typical electronic 7-digit metal SAFE, and Dr. Warren's office. The code is to be changed on a monthly basis by said doctor. Personnel who wish to examine SCP-331 must ask for authorization beforehand. As of date undisclosed, SCP-331 is worn by SCP-331-1. Description... SCP-331 is a red plastic cat collar, approximately 23 cm in length. Metal studs surround the collar in intervals of 1 cm. Testing has confirmed the metal to be nickel. The bell consists of stainless steel, electroplated with 24 karat gold. Ringing the bell has no distinguishable effect, adverse or otherwise. The word Tumbles has been painted on the back of the collar in yellow paint. Testing has confirmed that there is nothing unusual about the paint. SCP-331 exhibits no abnormal tendencies when worn by a living cat. When SCP-331 is fastened around the neck of a deceased cat, hereafter SCP-331-1, SCP-331-1 is resurrected, with no initial adverse effects. The collar does not halt the decomposition process, however. Fur and skin still rot at a regular pace. Tables are unaffected by the decomposition process. Testing has yet to determine the exact cause for this. SCP-331-1 shows no signs of distress during the decomposition process. SCP-331-1 can be killed by conventional methods, whereupon it remains deceased. The separation of SCP-331 and SCP-331-1 data expunged, unless SCP-331-1 is deceased. It should be noted that SCP-331-1 always answers to Tumbles and has an amiable personality, despite what it was called or how it behaved pre-mortem. SCP-331 was discovered when reports reached a Foundation agent of a zombie cat, witnessed around R. Park. Said agent immediately alerted the Foundation of a possible outbreak of SCP-8. MTF-1 was dispatched and neutralized SCP-331-1, whereupon it was transported to Scythe-1 after no trace of SCP-8 was detected. Upon arrival, research was conducted on SCP-331 that confirmed its properties. Item Number SCP-374 Object Class Safe Special Containment Procedures SCP-374 is to be stored in a disassembled state. The blade of SCP-374 is to be stored separately from the rest of the apparatus, and must be cleaned and polished with optical-grade polishing cloth, and non-abrasive cleanser, after each use. Due to their extreme age, all parts of the apparatus must be stored in climate-controlled facilities. The blade must be stored in a facility with a Class II fire prevention system, and the frame must be stored in a facility with a Class III fire prevention system. SCP-374's properties are dependent on the conjunction of its original wooden frame and metal blade. These are to be preserved. Other parts of SCP-374, screws, bolts, pull cord, may be replaced as necessary. Each expired instance of SCP-374-1 is to be preserved in formaldehyde for one year, after which it is to be incinerated, except in emergencies. Only D-Class personnel are to be used to produce instances of SCP-374-1. All interrogation sessions are to be recorded, transcribed, and archived. Interrogations are to begin with the question, can you hear me in order to compel a response? Description SCP-374 is a French Revolution-era guillotine, made of oak with a steel blade. SCP-374 manifests no unusual properties when not in use. Any use of SCP-374 to decapitate a live human produces an instance of SCP-374-1. SCP-374-1 is a severed human head, inhabited by the personality of a French Revolution-era man named Jean-Philippe Horst Donatien. For approximately 35 minutes after instantiating, SCP-374-1 is able to see, hear, and speak, and to manifest limited forms of enhanced awareness, enabling it to provide true answers to any questions it is asked. Its strategic usefulness is limited by its argumentativeness, and its antipathy towards the Foundation. As it is convinced that members and employees of the Foundation are evil murderers, it may attempt to obfuscate, mislead, or change the subject. As the end of its period of activity approaches, SCP-374-1 first loses its sight, then its hearing, and eventually becomes inert. History SCP-374 was recovered during a raid on a Marshall Carter and Dark facility in 19… Upon first instantiating in Foundation custody, SCP-374-1 made the following speech. Ah, my new slave masters, hear the rules of my existence. First, ask me any questions and I provide true answers. Second, expletive, all of you and expletive, all your mothers.  Please remember that.  Its uncooperativeness in these cases can be circumvented by simply telling it, that doesn't matter. Addendum Due to its tendency to launch into lengthy philosophical digressions about free will, predestination paradoxes, and chaos theory, SCP-374-1 is not to be asked questions about the future. Interview log March F*** 2000 F*** Doctor, can you hear me?  What the expletive? Do you foundation expletive want this time? Jean-Philippe, where are my keys?  Jean-Philippe, what is 58 times 23? Doctor, how and why is your consciousness bound into this guillotine? How and why are you compelled to provide true and informative answers to the questions we ask you? SCP-374-1, I am not allowed to answer questions about that topic. Oh, good work, expletive. You've wasted a human life on one of the few things I can't give you information about. You expletive monster.


All right, we'll go ahead and get started. The name of my talk is MongoDB Rules, has kind of a nice double ring to the title. MongoDB is a database. It's an open source database. It's written in C++. It's document-based. I'll talk a lot about it real quick. How many people have heard of MongoDB? Can you just raise your hands? Okay, cool. How many people have used MongoDB? All right, so this is kind of, I'm hoping to speak to the middle in some sense during this talk. It's not gonna be entirely introductory. I wanna basically give a set of rules for using it well, and hopefully in the process, if you haven't heard about MongoDB, you'll get a sense for what it's like. So the first thing, I just wanna take care of some really important business before I actually get into the meat of my talk. So there's a happy hippo. Okay, the important business. My name's Kyle Banker. I work for a company called Tengen, and all Tengen is, is the company that sponsors MongoDB's development. I'm at Huat on Twitter, I'm Kyle at Tengen.com. We're at MongoDB.org. There's very good docs, and you can download the binaries there. You don't have to compile it, and get it running pretty quickly. And if you ever happen to have a question on MongoDB, the Google group is a great place. You can usually get an answer in about 20 seconds. So, check that out. MongoDB rules. So I wanna ask one more question, and that's how many people here are using some type of NoSQL database? Okay, so maybe like 30, 40%. And of those of you who are using a NoSQL database, raise your hand if you are using it for some kind of operational reason. In other words, you need extra performance, or you need scalability. So maybe half. I feel like when the discussion comes to NoSQL databases, most of us are concerned about performance and scalability. And that's really important, and I think MongoDB addresses that. But there's another side to it, which you might not have a scaling problem, but there may still be a reason for you to use a NoSQL database like MongoDB. And that's that it makes things really easy to understand, makes your data easy to understand. That was my initial kind of reason for being attracted to it. And I think you'll see kind of why that might be if you haven't tried it already. So rule number one is to get to know the real MongoDB. What does that mean? There are some pretty good ORMs out there. They're kind of like ORMs. So we have MongoMapper, it's pretty famous, and Mongoid, and there's a whole bunch of others in the Ruby community. And those kind of give you a very active recordy kind of interface to Mongo. But they do hide some of the ease of actually just working with the database. When you're working with a relational database, your object relational mapper is absolutely necessary, right? Unless you want to kind of write a lot of SQL that's really complicated. In the case of MongoDB, it's not that difficult because we deal with something called a document. And a document is something in JSON. So I say, when I say get to know the real DB, I mean to start playing with it. We have a shell, and our shell isn't SQL, it's JavaScript. And so actually I was able to build this little TrimongoDB in the spirit of Try Ruby. And you can go to TrimongoDB.org and actually go through a little tutorial and play with a real MongoDB instance in the background and a JavaScript shell. And it gives you a sense for how that thing works. And then when you're done with that, you can go and download the actual shell and do a lot of the same things. But the other thing about the real MongoDB is using the Ruby driver. It's actually a very natural way of working with your data. And you can see right here, here's an example. We're just requiring RubyGems, requiring the Mongo driver. We, line five, we build a connection. Line six, we choose a DB in the very same way that we choose a database with a relational database. And in line seven, we choose a collection. In this case, we're working with page views collection because we're tracking page views. And so here's a sample document. And you see our view document in line 97 there. And it's, all it is is a hash, right? It's a Ruby hash. It points to a couple of different types. We've got a date type in there. We have some strings, we have an integer. And we just pass that to our collection object and click save.  What happens when you call save on an object like that? Well, first of all, the driver is responsible for creating the primary key. So everyone sees that underscore ID field in line 36. It's an object ID, and I'll explain kind of what that consists of. You can use anything as an underscore ID, but the MongoDB object ID works kind of like this. The first four bytes are a timestamp.  The third are a process ID. And next is a counter. It's a 12 byte ID. And one of the nice things about using MongoDB's object ID is that they have a timestamp included. So if you do a query and sort by object ID, you basically get things sorted by created at. You can also extract the created at from the object ID. So there's some value in actually using that. The second thing the driver does is it serializes the Ruby hash into a binary kind of dictionary form. And it's called Bison. And you can read all about it at BisonSpec.org. It's not difficult to understand, but all the drivers, regardless of which driver you use for the database, serialize to Bison. So when we call save, we add an underscore ID. We create that underscore ID if you haven't done so yourself. We serialize to Bison, and then we send it along the socket. And because we already have the ID, we don't have to wait for any kind of response from the database. And so the philosophy is basically that you can always add machines, you can always add clients. So if you're gonna pound the database, you shouldn't necessarily have to wait for a response. And so the drivers end up doing a little bit more work. So the second rule is to use object IDs. One of the things we've seen in the Ruby community is that a lot of people kind of decide to use a string version instead. But object ID is a proper Bison type. It's a little bit more efficient because it's 12 bytes versus 16. It has that timestamp built into it, and it's kind of the standard. So if you're working with object IDs, that's just kind of one gotcha to keep in mind. The next thing is to use rich documents. And this is probably one of the really important aspects, or one of the reasons why MongoDB is great, because you can represent rich data structures within a single document. Now I'll give you an example. I have what looks like, this is a single document right here, and it's representing a cart or an order. And I'll explain, you can see a lot of data in there. I'm gonna explain it kind of one by one. But in the idea and in the interest of kind of talking about what's so great about rich documents, I wanna just go on a really quick tangent. Because I always like to show this in my presentation because I think it shows a good anti-pattern that I feel like is often solved well by document databases, and particularly by schema-less document databases. And that's this. So I like to show this database diagram. And this is a relational database diagram from Magento. It would be the same for any other kind of huge e-commerce app. But you can notice some patterns. And one of the things you notice just looking at kind of the overall view of this database diagram is that you see a lot of little tiny tables. Can everyone see those? If you look at the different entities, you'll see all these tables. And the question is what are these tables doing? And a lot of you know exactly what they're doing because a lot of you have been in this exact same situation. But what you're trying to do is you're simulating a flexible schema, right? And so we have all these tables right here, and you have these five here. And the only way in which they defer is that each one has a different field representing a different type. So if I need to add a dynamic integer attribute to a product, you know, that table is used. If I need to add a dynamic string attribute, et cetera, et cetera, you understand. And the really important question is like, what is the join like? You know, you cannot sit down and open up a relational database console and be a sane person and be able to say, I want to see what this product looks like. And so you sit down and you can't do it, right? Unless you're a robot, right? And so basically, you know, you can't really reason about this style of data. But I think that you can reason really well about document style data. And this is totally oversimplified. But if I can represent all those relations in a document, and if I'm allowed to modify that document as needed, add attributes as needed, without any kind of special migration or without any kind of extra tables, there's a win there, right? I can sit down at the JavaScript shell in MongoDB and say, give me this product. And I get a complete representation with all the data right there in JSON, which I can read as a human being. So what I like to say about MongoDB is that it's human oriented. And I compare it to Ruby in this way. You know, we were able to conceive of the data, you know, with a document kind of model, we're able to look at objects as kind of holistic entities, as opposed to completely normalizing and decomposing those objects. Not that, you know, that's not necessary in cases. It definitely is necessary in cases. But I see this as a huge advantage to a document oriented database and a good reason to use it. So if we go back to our order here, our cart, right? You can see that I have a couple of line items, right? And one is a Lumberjack laptop case. So I bought this laptop case online because I thought it looked kind of cool when it was online. And when I got it, I realized it looks like a Lumberjack's laptop case. It's kind of flannel and it's not very cool at all. But anyway, that's my Lumberjack laptop case. And you can see I have the SKU and I have the list price. You can see I can also store the shipping address in the same document and different kinds of totals at the bottom. If I go back though, the line items, right? It points to an array, an array of other objects. And all of that is represented pretty economically, I feel like, in this object. But this wouldn't be out of any value to us if we couldn't actually query it or manipulate it with our database. And that's the nice thing about MongoDB is that you can actually query on these items and manipulate these items. So we say that MongoDB has dynamic queries and that's just like a relational database, right? I don't have to define everything up front. So you see a super simple query right here. I'm just looking for something by user ID and that's totally straightforward to us. But look at the second query here. Well, the first thing is I'm creating an index and you'll notice that the index on this collection is gonna exist on an inner object. So I'm creating it on lieditems.sku. So you see in here, if you look at my lieditems object, it's lineitems.sku, right? That skew. So when I do that query for that attribute, on line 49, I actually use an index. So that can actually be efficient. I don't have to iterate over all these documents. I can do efficient queries over a rich structure. Here's a slightly more complicated query, but I just wanted to give an example of what's possible. Let's say I wanted to find the most expensive product purchased in the last week. So you can see in 52 and 53 there, I'm just kind of creating a date range and then I just pass those in as a document. My query is a document. My data is a document and the query is also a document. So I'm saying where created at is greater than last week and created at is less than today and I'm sorting by the total and I'm limiting by one and that can use an index. So that can be an extremely efficient query and still allow us to use that document style really easily. So these are some other query operators like in, for example, we can pass in an array, all size exists. So there are a lot of different kinds of special query operators that allow you to do a lot of what you can do in a relational database. Okay, so the rule number four is that array keys rule and let me just give you an example. You can really simplify tiny relationships. Tags are just a really good example. So you see this, I have a document here on line 68 and it's a link, right? And so say I'm having a social news site, right? And I wanna have it be taggable. So I have a link and I have a title of a URL and then I have an array of tags, right? Tech startups and Time Waster. And then I go links.save and I save the link, right? Now I can have an index on that array field. So I'm saying I'm creating an index on tags so that when I do this query, when I say, okay, find me all the links that are Time Wasters, that's actually efficient and it's actually not wasting any time. So this uses an index and you see the query is very straightforward. I don't have to do any special iterating over the document. So that's just a nice thing whereas in a relational database, we'd have this table that's really small that has some kind of user ID, tag ID and a piece of text for the actual tag, something like that and here we can just like, we can just totally eliminate that level of normalization and just throw it right into our document. So that's one reason that array keys rule. Second reason they rule is because you can represent kind of more complex things like many to many relationships. So say I have like products and categories and you can see the category here, just a title, vinyl. The product is some record and the category IDs are just an array of object IDs. Now I can have an index on that so that any kind of query on that is efficient. If I wanna find all the products in the vinyl category, the query is super simple. I just passed this document, products that find where the categories ID is the object ID and the MongoDB knows how to use that array efficiently and do an efficient query in that case. If I wanna find all the categories for the product, the same thing, it's just kind of a reverse process. It's a slightly different query but the important thing is no join table. I can represent this really simply. So number five, use atomic operators. So a lot of you are probably familiar. Everyone know like Redis is pretty famous because it uses atomic operators. MongoDB has a whole bunch of atomic operators as well allowing you to kind of modify a single key in place which can be really efficient. You don't have to pull it down and modify it and send it back up to the database. So for example, oops, this didn't come out right but say you're reading hacks, say you're building hacker news and you want to implement that upvote functionality right here. So the query looks like this, right? We wanna find a post with a given ID, some ID X, and where the voters does not contain this user's voter ID, right? So that query only succeeds if that voter hasn't voted on that particular item yet. And then the update looks like this. If that query succeeds, then we're gonna push, which is an atomic operation, we're gonna push the voter ID onto the voters array. So that's an array of voters. And then we're gonna increment the votes by one. So we're caching that value so we don't have to kind of dynamically count that every single time. And somehow I put that twice. But what I meant to do is just send it up to the database. So you can set, when you do an update operation, you have the query for the particular document and then the update. And I use those atomic update operators right there to kind of handle all that in place. I don't have to bring anything down from the database and that can succeed all in one operation without going to multiple tables, anything like that. So another kind of cool example is concert seats. And we have this command called find and modify. And it's a special command. What usually when you do operations to MongoDB, kind of I was talking about earlier, you don't wait for a response from the database. And so when you do an update, you're not gonna wait for any kind of response from the database. But if you do need a response, we have a special command called find and modify. And commands are special entities in MongoDB. And so you basically create them with a hash. So I'm saying look at the seats collection here. In the query on line 186, I'm saying find a particular concert, particular seat with no expire date. And then I'm doing an atomic update operation right here. And I'm setting an expire date, like in the next 15 minutes, they have to make the purchase so they can't have the seat, right? So I send that command and I get the document back. I get the document back only if it succeeds so I can be sure that there's, I can ensure that level of consistency for that kind of item. So if there's some kind of inventory or something. So even though we don't have full transactions, you can still use these atomic modifiers in a lot of situations. And here's some of the more update operators, incrementing values, setting given values, and then a lot of different operators for pushing or popping things from arrays. And like I said, the array keys are just something that people find really useful. So we also have something called MapReduce. And most people have heard of MapReduce but think of Google's MapReduce or kind of a large distributed computing style MapReduce. And that's definitely one kind of MapReduce but originally it's just a functional paradigm, right? And what you use it in this case for is aggregation and results always come out in a new collection. So here's an example and you saw our order document. Let's say we wanted to find the total of a bunch of orders from a given zip code. We emit a value and you can see in our map step here, I'm writing a JavaScript, oh by the way, I'm writing a JavaScript function here because the database understands JavaScript. And even if I'm writing this from Ruby, I'm still sending a JavaScript function to the database. And so in this case I'm emitting a zip code as my key so things will basically be grouped by zip code and then I'm emitting a document with the total for the value. And so you can imagine your reduced function, I always kind of explain it this way, imagine your reduced function receiving a unique key and an array of values. There's a typo inside that array of values right there. So our reduced function though just grabs those values and sums them all up and what you get when you return the MapReduce job is you get a sum. So you can do all kinds of aggregations, averages, counts, things like that with MapReduce. It's typically not used for like a live application but for like a more extract transform load style situation. Okay, seven is indexes are indexes. And so in MongoDB, collections support up to 40 indexes. So and the indexes are the same data structure as is used in a relational database. Which means a couple of things, they're gonna behave very similarly. So you have to kind of use all the knowledge you have about working with a relational database to build indexes in MongoDB. So for example, we've seen people with 80 gigabyte databases who create indexes and their database kind of freezes up on them even though indexing now happens in the background. Still it takes all, it's a huge IO operation. And so it's really important to just keep in mind you gotta be smart about indexes still. You can take some time if you have gigs of data not if you have megs of data. Really be smart about compound indexes and make sure that your queries match your indexes or rather your indexes match your queries. That's incredibly important in any database and it's important in MongoDB. I've seen this, this is kind of a, you see the line of code at the bottom of the screen here. You see this a lot in some of the ORMs and I think this is kind of a remnant of older ORMs. Basically we're saying define a key username and then index is true. And some people will be really cavalier about this and they'll be like, oh yeah, index is true. And then their database will be like, so you really have to be careful about indexes. Okay, so gridFS is the specification for storing binary data in MongoDB. So you can store large files in MongoDB. And basically it works on the driver level. It's not technically a feature of the database itself. And so suppose you have a picture of a lumberjack. Okay, and you wanna store that in MongoDB. Here's the API, it's pretty simple. You define a grid object in line 230 there. You open up a file, this lumberjack file, and then you just do grid.put, give it the file descriptor and a file name. And the way this works is it throws things into two collections. Everything in MongoDB works on the collection level. Collections are analogous to tables. Not sure if I explained that. So we have a files collection for the metadata and a chunks collection for the data itself. And that data will get automatically chunked into a chunk object like this and maybe one of these for each chunk of that data. And MongoDB, it's pretty fast and I'll explain that in just a second. So it can be efficient for storing data like this and can be really nice for the organizational win that you get for doing it. So a little bit about kind of MongoDB's speed slash durability trade off. One of the techniques that is used is called memory mapped files. And probably a lot of you know what that is. But it's basically a kernel mode for mapping files onto virtual memory. And so when we're writing information to the disk, it's almost as if we're writing to memory. And the kernel manages which of that data is actually in memory and which of it is still on disk. So one of the important things about this is the kernel is gonna handle syncing to disk in a lot of cases. And the database is gonna enforce a F sync to disk every minute.  And so what we say is that you need to replicate.  You can adjust the F sync if you want to F sync every 30 seconds. But sort of MongoDB, the trade off is this. We think that the speed gained, the speed gained by using memory mapped files and storing a lot of data, allowing data to be stored in memory that is, is more important than being super durable on a single node. And that durability is better achieved kind of multiple nodes. So replicating and backing up are important. It supports the same kind of replication that you'd be used to in, for example, MySQL. A couple of performance notes about MongoDB. So the drivers do quite a bit of work. I showed you a second ago, we generate the object ID and we serialize to Beeson. Beeson is the format in which the data is stored in the database itself. It's the format of our queries. So the drivers actually do quite a bit of work. And the Ruby driver, because it's Ruby, can be a little bit slow, which is okay. But if you're doing benchmarks on Ruby, the only thing I would say is don't benchmark on a single node or a single process. Make sure you benchmark across multiple processes because MongoDB isn't gonna care, right? But if you start pumping data into MongoDB via the Ruby driver and you look at your CPU consumption, everything's gonna be in Ruby and pretty much nothing is gonna be in MongoDB. And some of the guys who I was talking to here, Alan, I can't remember the company, but they're doing a lot of analytics style kind of gathering with MongoDB. And they've actually, for the analytics side of the application, they've actually decided to use Clojure on top of the JVM using the Java driver, which gives them a huge kind of core performance. They can use multiple cores and they give a huge speed performance. So in the worst case scenario, you can use a different language driver. But in a lot of cases, Ruby is very good. Definitely use embedded documents. And I didn't talk about this. There's kind of the mental win that you get from embedded documents, but there's also a computational win because we don't do any joins. That's part of the scaling strategy. The database doesn't do joins at all, but if you can store a rich relation inside a single embedded document, which you often can, then the server doesn't have to do any work when you retrieve it. So you get a big performance win in that case. Coree should definitely use indexes. I think a lot of you know that, but we've seen people who don't necessarily know that. And so it's just good to remind. Keeping indexes in RAM is really important and keeping your working set in RAM are important. Those are important with relational databases. Those are important with MongoDB as well. So we've seen people with 80 gigabyte databases who have four gigabytes of RAM and four gigabytes of indexes. And they're wondering why performance is hurting. You really need more RAM or you need to scale out. So auto shard to keep it in RAM. So the idea is if you can't keep indexes in RAM, if you can't keep your working set in RAM, then you need to shard. And we have a feature called auto sharding. I'm not gonna explain it in too much detail. I'm just gonna give you the basics here. But data is automatically chunked across multiple shard clusters. And you route all of your information through a Mongo S client, which automatically distributes your queries, updates, et cetera, to each of the individual shards. All the shards are completely autonomous. They don't communicate with one another, which is the reason we don't support multi-object transactions and joins. But this kind of gives you the ability to really scale writes and reads. And it's pretty cool. And you can set it up right now. You can set up all the shard nodes on your Mac and kind of get a sense for kind of how it works. And I'd be happy to help anybody out with that. But it doesn't apply to everybody, right? And like I said, scalability isn't the only reason. It's also just about the mental win that you get by using a document database. So just two production cases. And then hopefully I'll have some time for questions. I wanted to go through this quickly to answer more questions. Sorry? Oh, five minutes. I don't have much time, actually. So just SourceForge.net, they store all their project pages in MongoDB. They can store all the information on the project page in a single document. So it gives them a huge win in terms of their queryability. They don't have to do any kind of joins on the server. If they need to add attributes, that happens completely dynamically. And they've been running it since last June. And you can see presentations on it on the web in different Python conferences. They've talked quite a bit about it. Oh, shoot. I meant for that to say GitHub. Actually, GitHub's using it for a back-end analytics. And I had to mention GitHub because I know we're not really SourceForgeers here. And then I want to talk about HarmonyApp, which is John Nunamaker's pretty cool CMS. They're originally on MySQL, but they switched to Mongo and it just completely simplified their schema. And especially when you're dealing with something like a CMS, it makes sense to have something really dynamic where you can store a lot of information in a single document.  And you can check our page to see some details on those. And I'm willing to take any questions. Yes? You're familiar with Rescu or is it used for Redis? Anything you could build up in Mongo? I think so. Now that you have that find and modify command that I showed you, you can easily go up and set the status of something and bring it right back in the same operation. So yeah, I definitely think you could. And I think somebody is working on it, actually. Yes? Can you describe or just get a little bit more on what you think about the document is and also talk about... Okay, well, I mean, that's just, you don't have to call it an embedded document. All it really refers to is the idea of a document containing kind of documents within documents. So you saw, for example, that example I gave of the order and the line items represent an array of other documents inside of it, right? So that's one example. Another example might be, if you had a simple blog and you wanted to put all of your comments inside the post object, you could do that. And so that's the idea of kind of embedding another structure inside the same structure. Basically, any structure you can represent with a Ruby hash, you can send to MongoDB. Sure. What are the differences between MongoDB and Couch? Yeah, I can't totally explain all of them, but so there's a lot of differences actually. The biggest difference I think is dynamic queryability. Okay, so CouchDB, you know, Couch, well, there's a lot of differences really. CouchDB uses HTTP, MongoDB uses a binary protocol over a socket, CouchDB has a kind of multi, they focus on this kind of multi master replication scheme whereas MongoDB's path to scalability is via a auto sharding mechanism. CouchDB, you query by, you have to build indexes using a map reduce language. And so you write these map reduce functions that build a B tree index in the background and then you're able to do queries on that. Whereas MongoDB, you're able to do queries kind of ad hoc as you will and build the indexes more in kind of the way that you would in MySQL. Also, MongoDB supports atomic updates which I don't think CouchDB supports. So those are a few of the differences. Yes? Kyle, I just wanna, we have a lot of us starters with Ruby, I think we start out writing like Java and Ruby. Yeah. We wouldn't want to make the same mistake like moving to a model. Like how can we break our SQL background? What's kind of the high level of design? Is there a good document, you know, support? I've written some documents on data modeling. We have a couple of documents on our website on data modeling. In general, I would say trivial relationships that exist in a relational database should be contained in a single document. And then more complicated relationships where we have two full-fledged entities. That's sort of a judgment call and you need to kind of decide on what your use cases are and whether that's gonna fit in a single document or whether you can normalize. And there's nothing wrong with normalizing in MongoDB a little bit. And plenty of people do it, it's designed for that as well. Yes? I heard people talk about, maybe you use short key names because they're listed over and over, does that? I don't think that's a problem in practice but people have worried about that. But I mean, I haven't seen that in any cases really. Yeah? Are there any things you have to worry about with character set and coding? Can you store all the given code? Yeah, so everything, for the moment, everything we're saying, everything needs to go in is UTF-8. So we're not supporting particular, you know, your various character sets. And like, yeah, there may be some way to go in terms of that. Yeah? There seem to be a number of different binary serialization standards out there. Beeson and Burd and AppRow and ProtocolBot versus RIP. What do you see as some of the benefit of Beeson versus some of these others? Or do you see it converging or? I'm not an expert on that topic. I guess like the reason I see Beeson as a good standard is because it maps very nicely to data structures that we all know and work with. Which is JSON, Python dictionaries, Ruby hashes. That's, yeah, yes? What's the potential for accessing gridFS directly from say a web server like nginx or patchy to get those files? People have actually built those. So it's totally possible, yeah. And in fact, in fact, one of my coworkers, Mike, has built the beginnings of an nginx module to just go right in and grab the stuff at the very top. What's on the roadmap for the future? So the roadmap, the main thing right now, so let me just do one cool thing. We just added 2DG indexing, which is really good for a lot of use cases. Find me the 100 objects in nearby. So one of our customers needed that, we added it. The big thing is sharding beta. And the thing that has to happen for that is we want a 100% automatic failover. And right now, the individual shards, you'd probably have to manage the failover manually. So there's a concept called the replica set. I can tell you all about it after this for automatic failover. But obviously, the sharding is really, really important. And that's over the next few months. Over the next month or so, we should hit beta. And the next six months, definitely production. Yes? So speaking of sharding, if you go with a few slides back, and you have a diagram of what you're going to structure with the sharding, and you still got the Mongo OS, and the Mongo OS, that's still a single point of failure. Kind of no. The Mongo OS is a super lightweight process that would live in the same machine as your application. And so you could have multiple Mongo OS clients across your application. So there's no persistence within that process. It gets all of its data from these config servers.  The idea is that those are all redundant so that there really isn't a single point of failure. So yeah, if your app server dies, then it fails. But then you fail too. Yeah. So the guy who just got arrows going to both of those Mongo OS is down. Yeah. Yeah. Yeah, sorry. I forgot an arrow there. All right. Yeah, I can talk to you more about it afterwards. Maybe one more question? One more question, Nate. Or maybe not. OK, yeah. So do you have any tools for finding out after the fact that it's like one of the queries you've got online? Yeah, we have explain. So you can run explain on any query, and you can see the query path and how the query optimizer is working. So it's all right. Great. Thank you very much.


America is built on the backs of a mountain of dead babies. Blood. That's our country. We deserve to be judged. Millions and millions. These people talking about 200,000 COVID deaths. Give me a break compared to what we've done. And we kill men that way. But we also kill men through this culture of shame. Now, shame's good.  It's my body saying, don't do that. And when you feel shame for something that's immoral and bad, that's your soul saying, don't do that, OK? But I shouldn't move my hand in a natural way, and it hurts. Something's wrong if I'm moving my hand. Something's broken.  Something's wrong.  And we are shaming men for being masculine. Little boys, you guys read the APA standards that came out a couple years ago.


Next question is from K. M. Emerson. What are your thoughts on rucking? Does it combine some of the benefits of resistance training with cardio? What impact does it have on posture?  It's uh, I I'm curious to what you guys think. I don't off top of my head I don't see a lot of value in it unless you are specifically training for something where you're gonna need to go like For distance with the backpack on you. Yeah, or carry like it Very specific right if you're somebody who is just trying to get in good shape Or you're just trying to improve your your mild time or just be general strength Whatever I see no value in it whatsoever If you are going to if you're training and you're gonna go like a go-rock competition You know and that's part of the competition is you have to you have to carry a weighted vest on there Then that makes a lot of sense. So so rucking essentially is training with like weight on your body Right for the listener. So you can use with a backpack or people will do this with weight Vests and stuff like that. I'm with you Adam I think if you're training specifically to get good at carrying things for long distances like you're going backpacking So I've had clients that I've trained like this where they they told me Hey, you know, I want to get I want you to get me fit and ready I'm gonna do this, you know, this the seven-day backpacking trip or we're gonna be hiking miles every day everything that I'm Taking on this trip has to fit on my back in which case I would actually have them train This way they would go and do hikes and they would carry weight I'd have them put weight in their backpack or whatever or and then towards as they got closer I had them actually carry the pack that they would carry when they would go on their backpacking trip other than that You know, here's some of the problems with rucking People don't walk Very good anyway, like I don't have good biomechanics. Anyway, then they're gonna throw a lot of a lot of load on and then they're gonna go for long distances Yeah I tend to see a lot of joint problems a lot of foot ankle and knee problems You have to be pretty fit to go like I don't think you should go from like not hiking a lot So like I'm just a regular dude now. I'm gonna start rucking I think you need to be really good at hiking first like and really fit and then maybe you can add some resistance Otherwise causes problem. Yeah I was trying to think of a justified way of like throwing it in to build work capacity or like from that you know aspect of like if I was to think of conditioning but like adding weight into my conditioning if My sport was something where I guess like a wrestling or where I'm actually carrying another person and trying to like Move another object that was fighting me and like the added resistance of that Where it would make sense where the like enduring that mattered like having that that added stress on me would matter I would probably program that in somehow, but in in terms of yeah Like the joint thing would be my issue with it is all that added weight over time as you're You know walking or running especially with it will Will definitely impact your joints negatively well The second part of the question too is does it combine some of the benefits of resistance training with cardio and no No, not really. I mean it's basically cardio still. It's just I Mean we don't I'm not even a fan of people using weights in circuits That's too close to cardio doing cardio. It's just a weighted vest or a backpack Yeah, like you'll get a little bit more strength than you will without putting weight on your body But it's it's all almost all endurance and then you know the ask what impact does it have on your posture?  Maybe not as much But if you're loading a backpack on your bag Most people are gonna be leaning forward when they do that your posture is gonna be different So not a lot of value You're not getting a ton of reward and that's not saying you don't get any reward You're not getting a very much reward for the amount of risk and what you have to do if your benefit is to Build strength. There's much better things for you to be doing Resistance training wise if your goal is to have great cardio endurance You can have great cardio endurance and not have to put a weighted vest on your back