The fumes intertwined, the deep red speckles weaving within the smooth green vapours as they fell into my lungs, my brain already throbbing from total sensory overload. My focus faded and separated into two entirely different scenes, as if looking through a red green set of 3D glasses. The blurs began to take form, and out of the mist, stood Dimitri and Sally : the blackness unfolding behind them.
'You have just done what no other man has done before : attempted to control the two herbal super powers of Mother Earth,' they said in unison, 'and by now must realize just how dangerous your trip will be'.
'My trip ? Where am I going ?'
'Not even the most experienced psychonauts know exactly where their adventure may lead them, and but a few return alive. The lands you will encounter are ones of purity and the utmost secrecy, for they exist only within you : what ever shape that manages to take form behind us shall be your path. Take care in where you place your next foot, for this world is one of surprises, some of which are hardly as they seem.'
With that the two apparitions vanished, and I stared into the darkness in front of me. A white cannon light streamed across the night sky to my right, and a pack of rainbow butterflies followed the stream of photons with unimagined speed.
I was in a bustling city of buildings, cars and streets - with the amount of activity ecstatic. People were all flocking towards the hill where the birds went and the lights were coming from, all content to smile and wave at each other, all perfectly happy with the chill in the air and the stranger blocking the foot path.
I stepped out of the road to let the people by, with a few encouraging pats on the back to help me get to where I was heading. I had just made it to the shops on the edge of the footpath when I bumped into the action hero himself, James Bond. A purple suit and an off yellow Rolex on his wrist, his perfect voice sang out in a goodbye to the shop owner behind him - a Calvin Klein store, where he must have purchased such a fine suit.
Even by the lustre of the night sky the shop looked vibrant : its pink walls coated in brown specks of a crumbly material, soft on the eye but hard to the touch. I swivelled the rock in my hand, admiring its sensation of power and significance before the bell of the shop next door rang, and out stepped one of the weiredest dressed women Iíd ever seen. She was coated from head to toe in every coloured garment in the land, beaming with a grin that melted my heart right there. Both of our eyes met, and she walked up to me, talking all the way :
'Hello ! How are you ! Donít you just love my clothes ? Where are you heading tonight ? To the night club, no doubt ! Silly me ! Enjoying your trip in Phenethylaminia I imagine ! Wonít you be my guest at the bar tonight, young man ? Which raises the question, have we been properly introduced yet ?  Arenít I just a doof !'
I was swept off my feet and into her grey Audi TT parked outside, and only managed to catch the name 'Visionary Cacti Phenethylaminia' on her shop front before wizzing off the street towards the hill.
Every exotic car brand imaginable was displayed for all those eyes quick enough to catch them zoom past, but our Audi had just enough zip to even their speed : Blue Armaniís, Red Ferrariís, Green Mitsubishiís, White Rolls Royceís ...
The towering cylindrical buildings flew by, and I was inspired to question the lady as to itís odd texture - it seemed it was the pride of the land, and that I may come across the material tonight without much trouble. I glanced up at the hill, and we cruised higher towards the light and sounds : by now, the whole land was thumping with a beat resonating from the night club above us. I soon discovered my exubrant host was Ms. Kelly, and that I would be meeting Adam at the club tonight, the mayor of the city we were now leaving behind us. I was the first 'white eye' this land had ever had, and I must meet the mayor 'before I lose my sense of individuality' ... whatever that meant.
The doors almost fell off their hinges due to the overpowering thump of a thousand speakers, each almost as tall as myself. It seemed a Guest DJ had been hired in advance to accommodate the crowd gathering at the entrance : bodyguards were non existent in this society, and all those who were ready to enter passed straight along the empty line and into the blinding light that flowed from the doorway. 'Torsten Weirdman' read the flyer stuck to the door, but his talent was far from it.
The rest of the night was a blur from then on, and I can only remember the trance like state I entered as I connected with the group around me : we all formed a whole on the dance floor, and it left me deep in thought as to how much Earth would benefit from these mysterious glowing pills that were being handed around.
Finally, after a long night of rapid pulse beats and frequent menthol breaks, I was approached by Ms. Kelly once again and led up to the main podium, and was stood beside Torsten and the empty space that was soon to be filled. Ms. Kelly hushed the attentive group as Adam stepped up to microphone, cleared his throat, and began to speak :
'Hello, and welcome again to this most special of nights, one which I have a few highly regarded guests in attendance. Thanks to Ms. Kelly, we have arranged for Phenethylaminiaís proudest export, Torsten Weirdman, to play live for us all. But the real reason for such a gathering is so that I can announce the arrival of the lands most miniscule pupilled guest, the honourary ...'
Adam froze. His face went white with horror, before falling face first through the podium and into the crowd below.  His naked body was translucent and slimy, and his spindly figure was poised ready to attack again. Our eyes met, and I could see his flaring up, his deep and wretched soul in an agry fear at my innocence and individuality.
The room became a blur as Ms. Kelly forced myself into the throng of silence below, screaming out : 'Katey ! Take the boy to Lucy !
I heard Ms. Kellyís blood curdling scream as I landed flat on my back on the hard cork board floor below, my back aching with blunt pain from the landing. I was blacking out fast, and was suddenly swept up and was somehow flying towards the roof above me. I caught sight of the evil monster as he withdrew his knife from Torstenís throat, eyeing me on as if to judge my inner being.
With that, I was sent crashing through the ceiling, rocketing out of view, away from the glowing lights filtering out of the gap in the roof.
I came to as the bottles of fire sprayed past us, streams of flaming liquid pursuing our every twist and turn. Molotov cocktails were rising from every angle from the misty land below, the scorch of flames burning the air beside our heads. The fog was torching in places, its flames sizzling before being enveloped by the air above it. The area smelt of petrol fumes, and was generally creepy. Audible yells and shallow splashes could be heard below.
'Where are we Katey ?'
'Keep quiet for now ! I will tell you later ! Let me dodge these molotovís for now !'
After a few minutes the mist cleared, and the banks of a vast sea rose up to meet a land of sunny fields, winding creeks and vast forests that encompassed all of natures beauty. We slowly descended into a ring of stones beside a creek that ran deep into the land, and landed comfortably, although weary from our journey.
As I spun around to see who had taken me all this way, I saw the sun rising gently behind this mammoth figure of plastic piping and metallic armor. Katey was a woman warrior with serious technological know how, a jet pack flaring at her back and her suit flashing with read outs and beeping micro chips. She glistened in the sun, and I could not speak - but she went first :
'I can imagine you have a lot of questions that are begging to be answered, but I canít stay here and idly chat - I shall get started straight away. You may be wondering who - or what - that thing was back in the night club. That monster is Chris, Adamís brother. His jealousy of Adamís lucrative control of the night club market has long been his uphill struggle, and cannot stand being swept aside for Adamís popularity and respect.  His attack is not entirely coincidental though : he obviously picked the same night that you, the white eye, decided to attend the festivities. We had to keep you as far away from Chris as possible, for you are now the only person alive who can face up to him : Adam could, but he could not guard his back forever.'
'How did you know I was coming ?' I said, full of fear of this strange and evil presence in the land I just left behind.
'On his way to this land, Dimitri spread news of the arrival of the individual to Adam and others. I am not sure of where Sally went to, which is why I must return back soon. I shall tell you of his business later : but you wished to know where we have just been.'
'Weíve just flown over the Sea Of Lost Spirits, the only thing that seperates the unity between the two great lands. Itís inhabitants are alcoholics, aggressive souls that were banished long ago due to their disruptive and uncivilized nature. Their leader is Jack Daniels, a crazed drunk who rules the foul sea, as well as his doomed followers.'
'The sea is made of pure alcohol, and is covered with a thin mist of alcohol fumes, ones which do not take to flames very well. The desparation of the alcoholics must have been at a height, or their intoxication mind blowing, for not often do they risk naked flames on the sea itself. We were lucky that my jet pack flames did not engulf the alcohol fumes and end our flight, but it is the only way for us to cross between the two lands.'
'Why did we not just sail across, just as those back there do ?'
'Not since the olden days has a person from either land tried to cross the sea : all the boats that set sail from the shore return covered in bloody limbs, alongside newly possessed bodies ready to exact revenge on the people of the land.'
'But now to the present, and the future : you are in Tryptaminia, and have been sent here to follow Dimitriís earlier lead. It is the safest place separate from Phenethylaminia, as Chris will most likely try to follow you here. You must follow this creek until you go deep into the forest, and within there you will find Lucy, her Chairman Meo, and hopefully Dimitri. Do not stop to smell the flowers or pet the animals - for even though they are of much wonder and amazement, time is easily lost in this area of the world.'
'I shall leave now to locate Sally, and bring her back to this land : and hopefully we will cross paths before too much trouble arises. Good bye, and good luck !'
And with that, Katey let out a loud boom, and her jet pack rocketed her into the grey mist that lay behind her. I stood there, chilled by the sight of the Sea Of Lost Spirits : but the land in front of me cancelled every bad feeling Iíd experienced that previous night.
As I paced along the worn path, I quickly approached the forest : but not before absorbing the morning rays, and all the glory they held. I could make out activity by the edge of the forest, and no stranger site had I beheld in both lands, but tanned babies in hula flower chains dancing around carved wooden roses ! The preoccupied babies took no notice of me, and I went to admire them closer before I remembered Kateyís advice, and went on.
The floor of the deep forest was blanketed in mushrooms, some bigger than the palm of my hand, their pungent aroma filling my nostrils with an acute sense of depth and insight. I could not resist but kneel down and sample one of the fine tasting fungi, and located the largest I could find. I knelt down and grasped the tough stalk, all the while the memory of Katey fading into oblivion.
Up jumped a large, and overly inflated bull frog onto the mushroom, a very curious sight to say the least. And it became even more curious as the frog seemed to draw the bulk of the mushroomís weight into itís venom gland, growing larger and larger as itís seat shrunk to a pebble of dust.
If only I could have realized how dangerous my mouth opening awe of the situation would become. The bull frog stretched itís jaws, shooting itís venom straight down my open trap, and too late - I had already consumed a large quantity of the frogís venom before it was too late.
I sprang up in horror, knowing Iíd been poisoned by the foul creature, and needed help quick. My mind flashed Lucy - she lived within this forest, and she must surely know what to do with me.
So I pelted on down the track, swerving left and right, all the while my vision shifting and my balance waivering. Iíd fallen over log and stone, clawing my way past vines and fallen trees, desperate to reach Lucy in time. If I did not reach her soon, then Chris would destroy the both worlds - and I would be responsible.
I would be responsible for destroying all of life on this world !?! It would be my fault, and this is my first time here !?! If I do not make for the clearing soon, I shall die ! And then what will become of this land after that !?!
I stumbled into the open space - but was this the right space ? Had I made a wrong turn back there and doubled back to the Sea again ? Am I lost within the forest, with no way out ? Will I ever reach Lucy before the end comes ? What have I done ?
I collapsed in a nervous wreck at the entrance to the clearing, and sat shivering at my animosity towards the creatures of this land.
It was many hours before I woke up out of that recurring trance, to the sound of maniacal whispering in the bushes to my left. I could not make out any shapes beyond the first line of trees, but I quickly darted towards the mound in the centre of the clearing for cover. Had I not been asleep at the entrance for many hours, I might have been able to plan for the events about to unfold before my eyes ...
As I rounded the mound, the fair princess Lucy, the major gentleman Chairman Meo and the crafty leader Dimitri all came into view among many seats behind the cover of the mound. They all sat in dismay at the sighting of me. They immediately beckoned me closer, and Lucy opened her mouth to speak ...

'Aah. The white eye has come to the lords of Tryptaminia for help, and ends up being murdered by the well serving Cane. Erin - show yourself to the boy so he knows who his killer is !'
From behind the dark and muscly Cane waddled Erin, a sloth like woman with an evil grin, and an immensely huge body. She had tied behind her the dead bodies of Chairman Meo and Dimitri, twisted and deformed into their binding ropes.
'Well, well, well.  The unmistakable hiss of Chris sounded behind him, and he fast approached the mound, knife glinting in the sun, gripped extremely hard.
The three evils began to take turns in telling myself of my impending doom. 'As much as we hate to say this, but your arrival here last night has proved both good and bad for us. You have tempted myself to finally do what I have longed to do : murder my brother. Never again shall I be looked down upon in the night club scene again. You have organized for that annoying Ms. Kelly to be disposed of, as well as Torstenís incessent beating to be finally ended. Both Chairman Meo and Dimitri have met their ends, and not at all too late. Their jobs were far too serious to be rewarding, and their properness needed punishing. As for Lucy, she forms the final part of the equation needed to hand posession of the land to the four evil super powers : for Jack Daniels will be along shortly,
and you shall meet him in person, individual. Aah, could this be him now ?'
But it was not. I could not be mistaken as to the sound of that whoosing scorching the tree tops, and in from the roof of the clearing came Katey, and Sally in her arms. They landed with a running thud, and ran towards their nearest opponent.
I leant back as Sallyís instantaneous administration came into force, quickly overpowering Erinís slow swipes, and choking her to death on a vine ripped from the mound nearby. Katey stood up to Cane, both sending power balls and plasma bolts at each other from near and far. Many times the wakes of these energy waves sailed by my ears, but Sally caught Caneís feet in her vine, and he was easily picked off.
Katey and Sally spun round to see how I was getting along - and I realized why they were looking at me like that. I rolled just in time over Lucyís body for Chrisís blow to strike the wet soil, Lucyís brain matter flying straight through Chrisís lack of existance. Further and further he pushed me, until I was backed in a corner against a tree on the mound, and he was preparing to lunge at my throat.
'Perform the candy flip ! Focus ! Perform the candy flip !' yelled Katey, as Chris charged at me, with blade pointed. Here goes, I thought.
I sprung into the air, almost as if Katey had propelled me away from Chrisís attack. I fumbled inside my pocket, withdrew the chunk of crystal, and landed poised behind Lucyís limp body. A loud squelch happened beneath my hand, and it began to glow.
The chunk of crystal in my hand was saturated with the brain fluid of Lucy, and was quickly heating up and flashing bright white. It was beginning to blind me, and I almost did not notice Chris running straight at me.
I suddenly realized why they call it the candy flip. The bitter sweet substance dissolved in my mouth, just as Chris bore his blade down on me - with no effect whatsoever.
Katey looked very reminiscint, but also gave me a false hopeful smile that gave me the chills. Sally looked sad, her alter lord Dimitri having been murdered due to her tidings with Jack Daniels.
'I was unable to locate Chris, Cane or Erin in either land when I arrived,' said Sally, 'but I knew where Jack Daniel would be. His location was most certainly on the Sea Of Lost Spirits, and so Dimitri and I headed there. We set sail and fought the drunken man, and he was no match for our speed or agility. I sailed him forward to this forest, and returned back to Phenethyaminia to see how the white eye was holding up. I heard on the way here from
Katey of the molotov cocktails - surely they were retaliation for my killing of their leader. I must have got back to shore just as you two had left - if I had gone over with you, maybe these three may have survived.'
My name - the white eye, or the individual - was due to my lack of pupil size, something which was strangely common in those parts. I, too, eventually lost my white eye in that land - which I attribute to those strange pills in Phenethyaminia, the toad venom in Tryptaminia, and the precious candy flip.
'But how did I know how to perform the candy flip ?' I asked Katey, wondering how I managed to execute the maneuver, and think to consume the powerful combination.
'You must realize that these lands are not of physical dimensions, but a world made up of your mind, only accessible by combining the two super powers. Every thing you have seen is but a hidden extension of you, and you already know of all that is in it. It is not luck that lead you to perform the candy flip - you knew how to do it all along, and only needed imagine doing it to perform it.'
'But now, you must return to your world - for the land is quickly fading, and your time has come. Sally and I shall now send you home.'
Sally picked a nearby bush, while Katey constructed a crude pipe of her metallic piping and her jet pack. I laid back against the mound, puffing on the glowing resins of the flowers picked, thinking 'Thereís nothing like a good cone, thereís nothing like a good cone, thereís nothing like a good cone ...'
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Intermediate
Whitespace
Whitespace is usually helpful for readability. In some cases, it can be a nuisance. Use these methods to rid of some of your superfluous whitespace.
- In a search, \s finds whitespace (a space or a tab), and \+ finds one or more occurrences.
- Delete all trailing whitespace (at the end of each line) with: use command :%s/\s\+$//
- More rarely, a user might want to delete (leading) whitespace at the beginning of each line: use command :%s/^\s\+
- One way to make sure to remove all trailing whitespace in a file is to set an autocmd in your .vimrc file. Every time the user issues a :w command, Vim will automatically remove all trailing whitespace before saving. autocmd BufWritePre * :%s/\s\+$//e
However, this is a very dangerous autocmd to have as it will always strip trailing whitespace from every file a user saves. Sometimes, trailing whitespace is desired, or even essential in a file so be careful when implementing this autocmd. We even urge against it. This is only to have you aware of the option.


Higher education is an interesting animal. More often than not, I find myself humbled by the mass of knowledge and experience that this beast offers to those willing to listen. However, this knowledge comes with a price -- financially, emotionally, physically, and otherwise. These negative sentiments usually find a comfortable home in my heart during finals. It was time to change that.
While more than halfway done with my coursework, some of the most intensive assignments awaited my attention. My intentions were as follows: a few hours with a friend and 2C-T-2 would first facilitate a deconstruction of my negative sentiments and perhaps produce insights into my upcoming work. A night of dancing would follow to relieve stress.
Miss C picked me up at 7:30PM and we headed over to my apartment to begin preparations.
En route (8:00PM) I received a call from K, a friend I promised a few doses of 4-AcO and 5-MeO-DMT to -- I hop out of the car and meet K in front of my building.  However, D happened to be K’s boyfriend of 4 years and she repeatedly vouched for his psychedelic ‘experience.’ I reluctantly obliged.
After weighing out their doses, it was clear that they wished to stick around for a little while to get a feel for the drug before they were on their way. Again, I obliged.
At 8:50PM, Miss C returns just as K and D ingest their doses. We heat up the vape and smoke a fair amount of marijuana. Perhaps it was the nervous excitement, but I was pleasantly surprised by my ability to counteract the ‘stoney-bologna’ effect I am oft smothered by when excessively hitting the vape.
Conversation began to get interesting as the 4aco started to creep on K and D -- I related my desire to develop a moral framework of love that finds root in the intrinsic qualities of all human and nonhuman life. I walked them through my course of study and the interrelationship between apparently unrelated subjects. I presented them with some insight into how they could integrate such sentiments into their upcoming experience.
I always enjoy relating information that, to me, appears so obvious, but to others is hiding just below the surface. The light that shines through people’s eyes when it ‘clicks’ makes me feel so good inside. I was happy that they were happy that I was happy that they were happy because we were all happy.
It was 10:15PM and K and D were just about full swing. Conversation turned to my eating habits: I’m a longtime raw foodist and D appears resistant to the idea of not eating meat -- he wishes to challenge my beliefs.
With as much care as possible, I inform him of not only the environmental, but also the effects that the meat industry has on the human condition. Effectively, a significant portion of fertile land in our country is allotted to growing feed which could be used to grow food for starving people in our country. Lastly, I cannot eat an animal that was raised on a farm in horrific conditions -- not simply for the way they are treated, but I am of the opinion that those emotions do not dissipate after the animal passes. When you consume that animal product, you absorb those emotions of sadness, confusion, fear, and hate. Take that as you will, but that is my opinion on the matter.
K and D were acting a bit funny -- it appeared as though D could not decide if he wished to stay or leave. He repeatedly brings K to the corner of my apartment to discuss the situation. K clearly wishes to stay, but D seems hesitant. I make it clear that they can do whatever they like, and that I will need to be dosing and leaving soon anyway. I ask D what was wrong, but couldn't find the words.
As 11:00PM approaches, D is still struggling to formulate coherent sentences. It became increasingly apparent that I could not responsibly allow him to leave my apartment. He was laying on the floor laughing and acting like a goofball. I cut my losses, called my friends to inform them I won’t be making it out, and left D to his own devices.
Miss C and I were ready to dose. 10mg ± .001 was weighed out, dissolved in distilled water, split in half, and prepared for injection.
+0:00 Belt. Pinch. Pull. Blood. Breathe. Whoa. WHOA.
Before the needle was out, every inch of my body was engulfed by an intense energy that gripped my very existence. My body shook as the cold mass of energy shifted from top to bottom, left to right, in and out, and back again. I thought: did I take too much? I told Miss C to wait before she joined the party.
Almost immediately, my visual field was overcome by my beloved 2C ‘focus’—everything filled out and took on new depth with a slightly yellow hue.
As I focused on my breathing to remain calm and centered, I heard K pressing D to relate what’s wrong -- something was clearly off.
+0:03 My favorite part: the purge. I made my way to the bathroom but was unable to follow through. K and D were still struggling to communicate. This time, however, D was a bit more reluctant. Just as I told him to sit down, I was once again overcome by the need to purge.
+0:05 I run to the bathroom and do my business. I knew I wasn't finished yet, but it was a good start. I reenter the room to see Miss C lying on the ground clearly enjoying the current state of affairs -- inside and out. K and D appeared to be making progress.
+0:07 Bathroom. Purge. Repeat.
I’m of the opinion that nothing is free -- if you wish to learn about yourself and make strides to better your life situation, you’re going to give back somewhere. In my experience, it’s the purge. Like I said, the best part.
I left the bathroom and observe K and D. D looked at K and told her that he had been cheating on her -- he’s deeply sorry and follows the comment with the desire to that they take a break from the relationship. K agrees, but wishes for them still to be friends.
I couldn't help but make the connection between my purge and D’s ‘purge.’
+0:15 I make my way over to the couch where Miss C is enjoying herself. I lie down and close my eyes. Miss C puts her head up against mine and we enjoy a surreal mind melt.
The infinite space that was the inside of my eyelids was cut down the middle by a blue line -- wrapped around it was an array of breathing geometric patterns that danced and morphed with light and love. The shapes liquefied and moved in every direction. Beautiful.
+0:20 Despite D and K’s breakthrough, D was apparently still unsatisfied. He began to get unruly and I was getting worried. He continued to scream for water even though there were multiple glasses sitting directly in front of him.
In hopes of calming him down, I turned the lights off and asked him to sit down. With the lights off, my visual field turned into a mural of smearing colors -- faces melted and dripped into the depths of darkness.
I stood up and snapped at D: “Be a man!  Immediately, I was overcome by the presence of my father. Exactly what I wanted to avoid -- I apologized to D and asked for forgiveness.
+0:30 My mood shifted from anger to apathy; if D had made it this far, he was going to be fine. It was simply a matter of guidance. With all the love I could muster, I attempted to present the current situation to D in a more fruitful manner. Despite my efforts, he repeatedly returned to the ‘mistakes’ he’d made in the past and how he will never forgive himself.
I responded: “Imagine yourself one year from now; you’re in a great place. Life is good. If you hadn’t made that mistake, you could be somewhere completely different. Is it still a mistake? Look at the big picture, brother.”
+0:45 D looked at me and asks: 'Now what?' 'Now what, what?' I retort? He says he sees the world differently now -- his eyes have been opened. 'Integration.' What you do now is up to you; this experience can be mean as little or as much as you choose to make it. I discuss the idea of writing a TR.
+1:00 Things were finally starting to look up. D calmed down and asked to smoke weed. I turned on the vape and got comfortable on the floor. Out of the blue, D looked at K and asked if they could have babies together. Stunned, I chose not to speak. After a short back and forth, K accepted his offer.
I interject: if you wish to have children, please adopt. If you want a child for the child's sake, please do not bring another child into this world. The cost to the environment and to the human condition is far too great. I can appreciate the 'connection' a mother has with a child she gives birth to, but the act of having a child is only a small slice of the pie.
In reality, that connection can be made through the nurturing and upbringing of a child adopted from all walks of life. If you cannot see past this, I'd venture to say you are having a child for you, not for the child.
+1:30 K was not immediately convinced, but after some discussion she was willing to see my rationale. I then thought, well perhaps my rationale is erroneous. Where does one base their rationality? Conversation turned to the liar's paradox: [True] objectivity cannot exist as long as we retain our identity as humans in our subjective realities.
'I am always a liar.'  Or, 'this statement is false.' It's true that it's false and it's false that it's false. We create the reality for something to be right, wrong, or otherwise. If this is the case, then on what basis do I make decisions? There must be a realm of objectivity which we can tap. I'll keep looking. We really are rationally irrational in our own little worlds.
Silence filled the room.
+2:15 'Then there's you' says D. 'K clearly likes you, how do I deal with that?'
Life is a constant ebb and flow, D. You fight it and you get left behind; you go with it and things just might work out in your favor. I cannot deny feelings that have been exchanged between K and I, but I can say that whatever happens is for the best. In this situation, I'm not [particularly] interested in having a relationship right now, so let's leave the conversation at that.
+2:15-3:15 Miss C and I left the apartment to allow K and D some alone time. The sky was unreal: the 'twinkle' in my eye took hold of the monstrous buildings that were surrounded by the milky blue sky. No matter how long I've lived in the city, my amazement for these man-made mountains will never cease. Conversation danced from subjects of botany, psychology, and philosophy.
Fatigue took hold.
+3:30 We returned to the apartment and got ready for bed. Before long, I drifted into a warm, peaceful sleep. An interesting night indeed.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


OAP Scientific Data Information System
You must change your SDIS Login Password
Please enter current password:
Please enter new password:
Confirm password:
Password must be at least 12 characters long, and it must contain at least one each of:
lower-case characters
upper-case characters
numbers
symbols '!', '$', '%', '#', '&', '_', '*', '^'
You will be redirected back to the SDIS, or you can go there
directly.


This library provides a simple Memcached connection wrapper.
The recommended way to install this library is through
Composer. Require the blablacar/memcached-client
package into your composer.json
file:
json
{
"require": {
"blablacar/memcached-client": "@stable"
}
}
Protip: you should browse the
blablacar/memcached-client
page to choose a stable version to use, avoid the @stable
meta constraint.
Create a Client and you're done!
php
$client = new \Blablacar\Memcached\Client();
$client->addServer('<IP_ADDRESS>', 11211);
$client->set('foobar', 42); // Return 1
Blablacar Memcached client is released under the MIT License. See the bundled LICENSE file for details.


At the Indus International schools, we try and instill the values of social contribution in all our students. In an endeavor to alleviate the human suffering caused by the pandemic, our students have organized a unique fundraiser event. Looking at the desperate situation in our country and the over-burdened health care, we realize there can be two approaches to contribute as citizens:
- Keeping ourselves healthy.
- Helping provide oxygen cylinders to those undergoing treatment.
Towards this cause, we are organizing a 48-hour virtual event, called “Run for Oxygen”. All funds raised through this event will be donated to registered organizations that supply oxygen cylinders to government hospitals.
Completion of the official entry form, including online registration, confirms the Participant’s agreement to abide by these Rules and Regulations.
- Please register for the event by filling in the details in the registration form (see above). Once you have submitted the form, you will receive a confirmation email. Please register by the 27th of May, 2021.
- After Registration, please make the payment at the donation link above. Registration is only considered complete once you receive a payment receipt.
- Perform any physical activity of your choice, preferably indoors, or with necessary precautions, outdoors, for a duration of 30 minutes on the 29th or 30th of May, 2021.
- Record your activity as a short video (not more than 10 or 15 seconds long) or as pictures. This will be considered as a proof of your participation and completion of activity.
-
Email the recording of your activity to us at
<EMAIL_ADDRESS>by the 31st of May, 2021. In the email, please make sure to include:
- Your Name
- The activity you've done
- Video or pictures as attachments
- Send the email, and receive your online certificate.


{{ error }}
The information you provide in this section will help us find projects that are best suited to you. We need to know about the skills you have developed through uni, self-teaching, your job or any other aspect of your life. You don’t need professional experience with these skills – that’s what we’re here to help you find. Tick each category you feel skilful in and enter the details/relevant software in the two boxes beside.


Unit Testing in MVVM+Kotlin+DataBinding
Blog by theDroidLady
Introduction
I love Kotlin and MVVM. When I began writing the application with it here at 1mg, I instantly went, “Wow”! It’s clean, it’s easy to read (sometimes 😁) and helps you write better code.
However, while writing tests, I encountered certain problems.
In this article, let us resolve some of the common issues that can be faced during mocking and unit testing our features.
Mockito Troubles: the Right Dependencies
1) In Kotlin
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.example.authentication.login.LoginRepository
Mockito cannot mock/spy because :
— final class
Reason -
When Mockito mocks an object it extends the requested class to create an instance.
However, all classes in Kotlin are final by default. The rule: “closed for modifications, open for extension” is baked into the language.
So they can’t be extended.
Solution -
Either Replace your mockito-core gradle with the following:
testImplementation 'org.mockito:mockito-inline:latestVersion'
It is the configuration to make Mockito work with final classes.
Or
Use the Mockito extension mechanism by creating the file org.mockito.plugins.MockMaker in your test folder -
test/resources/mockito-extensions/org.mockito.plugins.MockMaker
Write this line in the file -
mock-maker-inline
2) Another problem was of AndroidSchedulers -
java.lang.ExceptionInInitializerError at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:35)
at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:33)
at io.reactivex.android.plugins.RxAndroidPlugins.callRequireNonNull(RxAndroidPlugins.java:70)
at io.reactivex.android.plugins.RxAndroidPlugins.initMainThreadScheduler(RxAndroidPlugins.java:40)
at io.reactivex.android.schedulers.AndroidSchedulers.<clinit>(AndroidSchedulers.java:32)
Reason -
Default Scheduler returned by AndroidSchedulers.mainThread() is an instance of HandlerScheduler which relies on Android dependencies which are not available to be instantiated on the JVM.
However, we want to override the default AndroidSchedulers.mainThread() scheduler and return an instance which does not have these Android dependencies and can be safely instantiated.
Solution -
Use RxAndroid’s RxAndroidPlugins class which provides some hooks for overriding RxAndroid’s schedulers.
@Before
public static void setup() {
RxAndroidPlugins.setInitMainThreadSchedulerHandler(
__ -> Schedulers.trampoline());
}
3) Error while mocking Repository
private var loginRepository = mock<LoginRepository>()
After running the test, I saw the test failed as the actual repository was getting called.
Reason -
Here you can see, I am initializing the repository inside the ViewModel class, which means when I initialize my ViewModel class in Test,
those mock repositories will get replaced with the actual implementation.
class LoginViewModel : ViewModel() {
private val loginRepository: LoginRepository = LoginRepository()
private val truecallerRepository: TruecallerRepository = TruecallerRepository()
//other logic
}
Solution -
Pass these repositories from Factory to the ViewModel, you will always get the same instance you want to get invoked.
ViewModelFactory: It’s a class that implements ViewModelProvider.Factory and it will create the ViewModel from a parameter .class.
class LoginViewModelFactory constructor() : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass != LoginViewModel::class.java) {
throw IllegalArgumentException("Wrong Arguments")
}
val loginRepository = LoginRepository()
val truecallerRepository = TruecallerRepository()
return LoginViewModel(loginRepository, truecallerRepository) as T
}
}
In your ViewModel -
class LoginViewModel(private val loginRepository: LoginRepository,
private val truecallerRepository: TruecallerRepository) : ViewModel() {
// other logic
}
In Fragment or Activity -
val loginViewModel = ViewModelProviders.of(this, this.viewModeFactory).get(MyViewModel::class.java)
4) Error while mocking LiveData Observers -
private val mockObserver = mock<Observer<AuthenticationState>>
Solution -
When testing LiveData, InstantTaskExecutorRule is needed in addition to RxImmediateSchedulerRule if the class being tested has both background thread and LiveData.
Use this with RxImmediateSchedulerRule -
@Rule
@JvmField
var instantExecutorRule = InstantTaskExecutorRule()
That’s all from my learnings!!


--- layout: default title: Home ---
Accounting is changing rapidly with the new developments in technology, automation, data analytics, machine learning, natural language processing, even OCR/optical character recognition - all of it under one very powerful umbrella of digital innovation. A lot of the changes are still widely misunderstood and cautiously pursued. This blog is a means of exploring a small glimpse of what's possible, the challenges behind it and how programming can influence accounting.


#Grime4Corbyn relaunch in unexpected boost for Labour
Grime 4 Corbyn have made an unexpected comeback and endorsed Labour for a second consecutive election.
Following speculation that the musicians’ support for Jeremy Corbyn could be dropped ahead of the December 12 poll, ‘Grime 4 Corbyn 2.0’ has been announced.
With Wiley, Nadia Rose and Lethal Bizzle – who had previously called on Mr Corbyn to resign – recently tweeting their support, a new grime event to back the leader of the opposition’s tilt at Downing Street has been announced.
It follows a move in 2017 to get young people to register to vote, which was credited with helping Labour win support among young people.
The announcement also comes on the day Labour announced a new £1 billion investment plan for the arts.
In collaboration with Grime Originals, the 2019 Grime 4 Corbyn event is promising ‘special guests and a showcasing of the genre’s ongoing support for justice, equality and prosperity for all’.
Advertisement Advertisement
The group, which has tweeted that it is endorsing the Labour leader at the election, says on its website that it wants young people to ‘take part in the electoral process [but] vote for who you want.’
Sharky Major, the founder of Grime Originals and co-founding member of the collective N.A.S.T.Y crew, said: ‘My parents and grandparents have always been in favour of Labour and I’m no different. We are regular hard working people who want the best for people like us.’
Logan Sama, a key DJ in the scene, added: ‘I am not sure any politician can deliver what they promise, but I know that the Conservatives have delivered years of austerity and cuts that have massively affected the working class whilst the mega rich continue to get acquire obscene personal wealth and corporations continue to take their earnings offshore and not pay back in to our tax system.
‘I’m ready for change. For the good of the many.’
The digital event is set to include four hours of live streamed radio sets – a ‘digital take on the genre’s pirate radio roots’, on Friday November 29.
The line-up includes Durrty Goodz, Manga Saint Hilare and Lioness, with ‘special guests’ still to be announced.
Meanwhile, another group called Rize Up – backed by various musicians including Maverick Saber – is also encouraging young BME people to vote.
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


Popular Areas in 40th birthday gift send flower
40th Birthday Gift Send Champagne Next Day Delivery
Sending 40th birthday gifts is one of our specialities. We have a number of ideal birthday gifts to help you out. A present for a 40th can be difficult to get as they .
http://www.sparklingdirect.co.uk/blog/post/40th-birthday-gift-send-champagne.aspx
40th Birthday Gifts for - Red Envelope
Send 40th birthday gifts at RedEnvelope. Gifts from $29.95! Unique gifts to make their 40th birthday memorable. . RedEnvelope Gifts-Gift Ideas for Him, Her, and Baby . Flowers are great 40th birthday presents because they can be given to .
http://www.redenvelope.com/40th-birthday-gifts-rb40b
40th Birthday Gift Ideas - FindGift.com
This birthday sends them over the hill, so celebrate the monumental event with a unique 40th birthday gift. Shop gag gifts, comical apparel and retro gift baskets.
http://www.findgift.com/occasions/birthday/40th-birthday/
Perfect 40th Birthday Gifts for Women | eHow.com
Giving a birthday gift for a 40-year-old woman may seem like a delicate task. . chocolates from your local candy store or 40 of her favorite flowers. . For a larger gift, send the birthday girl on that trip she's been wanting to take, or take her on a .
http://www.ehow.com/list_7146547_perfect-40th-birthday-gifts-women.html
Send Flowers to India buy Gifts for Mother, Grandmother 40th, 50th ...
Send Gifts flowers to your mother, grandmother (mom, grand mom, )on their birthday, anniversary in India and surprise them by sending flowers. Phoolwala .
http://www.phoolwala.com/products/mom-n-grandmother/1/
40th Birthday Gifts
40th Birthday is a mark for maturity. Dgreetings shares sober ideas on 40th Birthday Gift to make your gift presentable among rest of the presents.
http://www.dgreetings.com/birthday/40th-birthday-gift.html


Maestro Nikola:
I have been waiting for you. Do you have some good news for me?
Ask him to decode the password on the metal plate.


Road elements
info
visibility_off
Vehicular circulation areas
info
visibility_off
Paths
info
visibility_off
Historic points
info
visibility_off
Polygonal landslides
info
visibility_off
Linear landslides
info
visibility_off
Widespread landslides areas
info
visibility_off


Class: Sketchup::FrameChangeObserver Abstract
| Relationships | |
| Inherits: | Object |
Overview
Implement the methods described in this class to create a frame change observer. You can not sub-class this class because it is not defined by the API.
This observer interface is implemented to react to changes in camera position (a frame) between one scene page and another. This observer’s callback method is called when the user manually makes a scene change, or the internal animation feature runs.
This abstract observer is any object that implements a callback method frameChange
with 3 arguments: from_scene
(the scene that you transition from), to_scene
(the scene that you transition toward) and a percent_done
between 0.0
and 1.0
(that indicates the percentage of transition between the two scenes.)
# Basic Class Definition:
class MyFrameChangeObserver
def frameChange(from_scene, to_scene, percent_done)
# Actual code here.
end
end
The observer is attached using the Pages.add_frame_change_observer class method, which returns an integer id that can be stored and later used to detach the observer.
# Attach an observer to the global Pages object:
@id = Sketchup::Pages.add_frame_change_observer(MyFrameChangeObserver.new)
Later, detaching this observer is done by passing this id
reference to the Pages.remove_frame_change_observer class method.
# Basic Observer Detachment:
Sketchup::Pages.remove_frame_change_observer(@id)
Instance Method Summary
-
#frameChange(from_scene, to_scene, percent_done)
This callback method is called during a slide show or creation of an animation after the camera has been set up, but before the frame is displayed.
Instance Method Details
#frameChange(from_scene, to_scene, percent_done)
The from_scene
argument into this callback does not appear to be populated on the PC. You can store a variable that keeps track of the to_scene
and then use that on a subsequent Scene selection to determine the last Page
that the user was on.
This callback method is called during a slide show or creation of an animation after the camera has been set up, but before the frame is displayed. It gives you a chance to perform your own actions during the animation. The arguments for frameChange
method are the scene page that you transition from (from_scene
), the scene page that you transition to (to_scene
), and a percent_done
between 0.0
and 1.0
that tell you the percentage of the transition between the two scene pages.
By watching for percent_done >= 1.0, you can activate Ruby code that executes as soon as the user’s camera has finished animating.


MyRent
Get started with MyRent!
Sample monthly payment
Nothing will be charged to your account
$
+ $5.00
service fee per transaction
$
/ month with service fee
The service fee is
__
% of your total rent.


You can optionally create a GatewayConflictResolver
cache plug-in to decide whether a potentially conflicting event that was delivered from another site should be applied to the local cache.
By default, all regions perform consistency checks when a member applies an update received either from another cluster member or from a remote cluster over the WAN. The default consistency checking for WAN events is described in How Consistency Is Achieved in WAN Deployments.
You can override the default consistency checking behavior by writing and configuring a custom GatewayConflictResolver
. The GatewayConflictResolver
implementation can use the timestamp and distributed system ID included in a WAN update event to determine whether or not to apply the update. For example, you may decide that updates from a particular cluster should always “win” a conflict when the timestamp difference between updates is less than some fixed period of time.
Implementing a GatewayConflictResolver
Note:
A GatewayConflictResolver
implementation is called only for update events that could cause a conflict in the region. This corresponds to update events that have a different distributed system ID than the distributed system that last updated the region entry. If the same distributed system ID makes consecutive updates to a region entry, no conflict is possible, and the GatewayConflictResolver
is not called.
Procedure
Program the event handler:
- Create a class that implements the
GatewayConflictResolver
interface. - If you want to declare the handler in
cache.xml
, implement theorg.apache.geode.cache.Declarable
interface as well. Implement the handler’s
onEvent()
method to determine whether the WAN event should be allowed.onEvent()
receives both aTimestampedEntryEvent
and aGatewayConflictHelper
instance.TimestampedEntryEvent
has methods for obtaining the timestamp and distributed system ID of both the update event and the current region entry. Use methods in theGatewayConflictHelper
to either disallow the update event (retaining the existing region entry value) or provide an alternate value.Example:
public void onEvent(TimestampedEntryEvent event, GatewayConflictHelper helper) { if (event.getOperation().isUpdate()) { ShoppingCart oldCart = (ShoppingCart)event.getOldValue(); ShoppingCart newCart = (ShoppingCart)event.getNewValue(); oldCart.updateFromConflictingState(newCart); helper.changeEventValue(oldCart); } }
Note: In order to maintain consistency in the region, your conflict resolver must always resolve two events in the same way regardless of which event it receives first.
- Create a class that implements the
Install the conflict resolver for the cache, using either the
cache.xml
file or the Java API.cache.xml
<cache> ... <gateway-conflict-resolver> <class-name>myPackage.MyConflictResolver</class-name> </gateway-conflict-resolver> ... </cache>
Java API
// Create or obtain the cache Cache cache = new CacheFactory().create(); // Create and add a conflict resolver cache.setGatewayConflictResolver(new MyConflictResolver);


Hello World! I decided to revive this site after I hosted it on GitHub page (aldidoanta.github.io) in 2015.
You can access the old site on Internet Archive
Hello World! I decided to revive this site after I hosted it on GitHub page (aldidoanta.github.io) in 2015.
You can access the old site on Internet Archive


pyclassyfire API¶
pyclassyfire.client module¶
A client for the ClassyFire API which enables efficient querying with chemical database files
-
pyclassyfire.client.
get_chemont_node
(chemontid)[source]¶ Return data for the TaxNode with ID chemontid.
Parameters: chemontid (str) – the ChemOnt ID of the entity. Returns: The classification results for the entity as json. Return type: str >>> get_chemont_node('CHEMONTID:0004253')
-
pyclassyfire.client.
get_entity
(inchikey, return_format='json')[source]¶ Given a InChIKey for a previously queried structure, fetch the classification results.
Parameters: - inchikey (str) – An InChIKey for a previously calculated chemical structure
- return_format (str) – desired return format. valid types are json, csv or sdf
Returns: query information
Return type: str
>>> get_entity("ATUOYWHBWRKTHZ-UHFFFAOYSA-N", 'csv') >>> get_entity("ATUOYWHBWRKTHZ-UHFFFAOYSA-N", 'json') >>> get_entity("ATUOYWHBWRKTHZ-UHFFFAOYSA-N", 'sdf')
-
pyclassyfire.client.
get_results
(query_id, return_format='json')[source]¶ Given a query_id, fetch the classification results.
Parameters: - query_id (str) – A numeric query id returned at time of query submission
- return_format (str) – desired return format. valid types are json, csv or sdf
Returns: query information
Return type: str
>>> get_results('595535', 'csv') >>> get_results('595535', 'json') >>> get_results('595535', 'sdf')
-
pyclassyfire.client.
iupac_query
(compound, label='pyclassyfire')[source]¶ Submit a IUPAC compound name to the ClassyFire service for evaluation and receive a id which can be used to used to collect results
Parameters: - compound (str) – The line delimited compound names. Optionally a tab-separated id may be prepended for each compound.
- label – A label for the query
Returns: A query ID number
Return type: int
>>> iupac_query('ethane', 'iupac_test') >>> iupac_query('C001\tethane\nC002\tethanol', 'iupac_test')
-
pyclassyfire.client.
sdf_query
(inpath, outpath=None)[source]¶ Given a path to a compound set in a sdf file, annotate all compounds and write results as attributes in a sdf file.
Parameters: - inpath (str) – path to compound file to be annotated
- outpath (str) – Path to desired output location
>>> sdf_query('/sdf_data.sdf')
-
pyclassyfire.client.
structure_query
(compound, label='pyclassyfire')[source]¶ Submit a compound information to the ClassyFire service for evaluation and receive a id which can be used to used to collect results
Parameters: - compound (str) – The compound structures as line delimited inchikey or smiles. Optionally a tab-separated id may be prepended for each structure.
- label – A label for the query
Returns: A query ID number
Return type: int
>>> structure_query('CCC', 'smiles_test') >>> structure_query('InChI=1S/C3H4O3/c1-2(4)3(5)6/h1H3,(H,5,6)')
-
pyclassyfire.client.
tabular_query
(inpath, structure_key, dialect='excel', outpath=None, outfields=('taxonomy', 'description', 'substituents'))[source]¶ Given a path to a compound set in tabular form (comma or tab delimited) annotate all compounds and write results to an expanded table.
Parameters: - inpath (str) – path to compound file to be annotated
- structure_key (str) – column heading which contains the compounds InChIKey or SMILES
- dialect (str) – dialect for parsing table (generally ‘excel’ for csv, ‘excel-tab’ for tsv)
- outpath (str) – Path to desired output location
- outfields (tuple(string)) – Fields to append to table from ClassyFire output
>>> tabular_query('/tabulated_data.tsv', 'structure', 'excel-tab')


jsoncols was inspired by Stephen Dolan’s jq and Simeji’s jid.
jsoncols [OPTIONS] [EXPRESSION] [INPUT_FILENAME] [OUTPUT_FILENAME]
jsoncols provides for both interactive exploration of JSON structures like jid and command line scripting flexibility for data extraction into delimited columns. This is helpful in flattening content extracted from JSON blobs. The default delimiter for each value extracted is a comma. This can be overridden with an option.
-d set the delimiter for multi-field output
-h display help
-i run interactively
-l display license
-m display output in monochrome
-v display version
If myblob.json contained
{"name": "Doe, Jane"<EMAIL_ADDRESS>"age": 42}
Getting just the name could be done with
jsoncols .name myblob.json
This would yeild
"Doe, Jane"
Flipping .name and .age into pipe delimited columns is as easy as listing each field in the expression inside a space delimited string.
jsoncols -d\| ".name .age" myblob.json
This would yeild
"Doe, Jane"|42


{% extends '_layouts/layout.html' %} {% block content %}
You’ve reached the edge of this prototype!
Go back or go to the index page


| join.tbl_sql {dbplyr} | R Documentation |
These are methods for the dplyr join generics. They are translated to the following SQL queries:
inner_join(x, y)
: SELECT * FROM x JOIN y ON x.a = y.a
left_join(x, y)
: SELECT * FROM x LEFT JOIN y ON x.a = y.a
right_join(x, y)
: SELECT * FROM x RIGHT JOIN y ON x.a = y.a
full_join(x, y)
: SELECT * FROM x FULL JOIN y ON x.a = y.a
semi_join(x, y)
: SELECT * FROM x WHERE EXISTS (SELECT 1 FROM y WHERE x.a = y.a)
anti_join(x, y)
: SELECT * FROM x WHERE NOT EXISTS (SELECT 1 FROM y WHERE x.a = y.a)
## S3 method for class 'tbl_lazy' inner_join( x, y, by = NULL, copy = FALSE, suffix = NULL, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") ) ## S3 method for class 'tbl_lazy' left_join( x, y, by = NULL, copy = FALSE, suffix = NULL, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") ) ## S3 method for class 'tbl_lazy' right_join( x, y, by = NULL, copy = FALSE, suffix = NULL, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") ) ## S3 method for class 'tbl_lazy' full_join( x, y, by = NULL, copy = FALSE, suffix = NULL, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") ) ## S3 method for class 'tbl_lazy' semi_join( x, y, by = NULL, copy = FALSE, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") ) ## S3 method for class 'tbl_lazy' anti_join( x, y, by = NULL, copy = FALSE, auto_index = FALSE, ..., sql_on = NULL, na_matches = c("never", "na") )
x, y |
A pair of lazy data frames backed by database queries. |
by |
A character vector of variables to join by. If To join by different variables on To join by multiple variables, use a vector with length > 1.
For example, To perform a cross-join, generating all combinations of |
copy |
If This allows you to join tables across srcs, but it's potentially expensive operation so you must opt into it. |
suffix |
If there are non-joined duplicate variables in |
auto_index |
if |
... |
Other parameters passed onto methods. |
sql_on |
A custom join predicate as an SQL expression.
Usually joins use column equality, but you can perform more complex
queries by supply |
na_matches |
Should NA (NULL) values match one another?
The default, "never", is how databases usually work. |
Another tbl_lazy
. Use show_query()
to see the generated
query, and use collect()
to execute the query
and return data to R.
library(dplyr, warn.conflicts = FALSE) band_db <- tbl_memdb(dplyr::band_members) instrument_db <- tbl_memdb(dplyr::band_instruments) band_db %>% left_join(instrument_db) %>% show_query() # Can join with local data frames by setting copy = TRUE band_db %>% left_join(dplyr::band_instruments, copy = TRUE) # Unlike R, joins in SQL don't usually match NAs (NULLs) db <- memdb_frame(x = c(1, 2, NA)) label <- memdb_frame(x = c(1, NA), label = c("one", "missing")) db %>% left_join(label, by = "x") # But you can activate R's usual behaviour with the na_matches argument db %>% left_join(label, by = "x", na_matches = "na") # By default, joins are equijoins, but you can use `sql_on` to # express richer relationships db1 <- memdb_frame(x = 1:5) db2 <- memdb_frame(x = 1:3, y = letters[1:3]) db1 %>% left_join(db2) %>% show_query() db1 %>% left_join(db2, sql_on = "LHS.x < RHS.x") %>% show_query()


Issue 48
Welcome to Haskell Weekly! Haskell is an advanced, purely functional programming language. This is a weekly summary of what’s going on in its community. You can subscribe to the email newsletter or the Atom feed.
Want to contribute to Haskell Weekly? Send us a message on Twitter or open an issue on GitHub.
News from the Haskell community
-
Dealing with complex C-structure-like data in haskell often forces the developer to have to deal with C files, and create a system that is usually a tradeoff between efficiency, modularity and safety. The
Foreign
class doesn’t quite cut it, external program needs C files, and binary parsers are not efficient or modular. Let’s see if we can do better using the advanced haskell type system. -
Who needs HashLife when you have comonads?
I’m going to talk a little bit about Conway’s Game of Life, comonads in practical use, and the performance improvement that they have to offer.
-
How clean does a Haskell codebase remain over time?
Codebases written in untyped languages most often rot as the years set in. I’m new to Typed FP, and it seems that the static type system in Haskell can help avoid most of these pitfalls. How is this in practice?
-
Haskell concepts in one sentence
After years of dragging my feet I’ve been learning Haskell with the help of a few friends. Many Haskell concepts can be quite daunting so I decided to write one sentence summaries to simplify them for myself. These are not by any means complete but are useful as a jumping off point.
-
The Hapistrano tool that we at Stack Builders use for deployment has been almost completely rewritten and new features have been added. The reason for such a rewrite was that we wished to make configuration easier and to avoid re-building our software on target hosts when possible, thus making CI cycles that deploy our software much quicker.
-
This post will focus on the contents of Hackage’s
these
, which is maintained by C McCann. I was struggling to understand some of the library’s concepts, which are presented in a quite abstract setting, so I’ll aim to keep it somewhat concrete, so it can be used as a crummy quick-start tutorial by future lazyfolk. -
This release includes several breaking changes, in preparation for the 1.0 release, as well as many enhancements and bug fixes.
=>
now acts like a binary type operator;*
and!
kinds have been removed; implicitly discarded values indo
blocks now raise errors; no more dependency on the Bower executable; pattern guards; duplicate labels; row constraints; patterns inlet
expressions; record accessors in type directed search. -
Functional Geekery Episode 88: Justin Woo
In this episode I talk with Justin Woo. We talk his introduction to functional programming; the transition from ClojureScript to Elm to PureScript for side projects; the appeal of PureScript; evangelizing PureScript and more.
Package of the week
This week’s package of the week is ghc-prof-flamegraph, a small tool to convert GHC time profiling reports into a format understandable by the FlameGraph tool.
Send us a message on Twitter to nominate next week’s package!


DACLs
Active Directory has several common securable objects which contain security descriptors. These security descriptors contain DACLs which hold Access Control Entries. Common objects include users, groups, and computers which correlate to the nodes in BloodHound.
The example below you can see the DACL and individual ACEs for the user smarar.
An object can have different access rights to another object. For example, Domain Admins usually have full control over user accounts within the domain. Alternatively, an authenticated user perhaps only has read access to certain information about the user. As an attacker, we are interested in understanding how we can leverage these access rights to gain control over objects of interest to get us closer to our goal.
DACLs in BloodHound
Version 1.3 of BloodHound includes the PowerShell “ACLs” cmdlet that performs the collection of object to object permissions in an AD environment.
Invoke-Bloodhound -CollectionMethod ACLs:
When we upload the data to BloodHound we can see the new edge types displayed.
In the example above we can see two new edge types of object to object permissions:
GenericAll: Full object control, including the ability to add other principals to a group, change a user password without knowing its current value, register an SPN with a user object, etc. Abused with Set-DomainUserPassword or Add-DomainGroupMember cmdlets.
WriteDACL: The ability to write a new ACE to the target object’s DACL. For example, an attacker may write a new ACE to the target object DACL giving the attacker “full control” of the target object. Abused with Add-NewADObjectAccessControlEntry. (“BloodHound 1.3 – The ACL Attack Path Update.” wald0.Com)
These are just two examples of new edges. Other edges include ForceChangePassword, AddMembers, GenericAll,GenericWrite,WriteOwner, WriteDACL,AllExtendedRights.
When BloodHound creates an attack path against Active Directory using ACLs, it will likely use more than one type of permission. Exploiting these permissions can be invasive and detected fairly easily. If an attacker, for example, leverages ‘GenericAll’ permission to change a password, and that user then is unable to log in, this could alert the user of your presence.
Will Schroeder (harmj0y) and Lee Christensen (tifkin) created a whole suite of new PowerShell cmdlets to exploit each ACE. These functions have not been committed to the Master Branch yet and so you will need to grab the Powerview.ps1 script from the dev branch, if you want to try them out.
Upload the script to Empire and take a crack at some of these awesome cmdlets.
> scriptimport /root/PowerSploit-Dev/Recon/PowerView.