text:
Discovering the Real Me
Hello everyone, if you came to this page because of the video, I must welcome you.
A little bit of my history and backstory can be found here:
I recorded this video five weeks into starting HRT (hormone replacement therapy), and by the time it was posted, another six weeks have passed. And while I'm writing this post at the end of the seven week marker, things are only getting better and better. Yes, my emotions are that of a teenage girl, but the physical changes are starting to kick in. If you've been following along on IG (#zr365), you'll see what has changed already in the face, and plenty more changes are still on the horizon.
While at the time of this writing (day 50 of the rest of my life), I'm still presenting male. Partially because I'm still a Sasquatch. The body hair removal is a slow (and really expensive) process, and I've really only started laser on my face, which hurts so bad. Electrolysis will start towards the end of March, as the laser can't kill out the greys, and since I waited so long, I have plenty of those. The body hair is thinning out as the hair cycles replenish, which is a plus, but I'm also doing a little bit of hair removal, and at least it isn't poking into my clothes by 5 p.m. that evening. Oh how I love hormones. :)
For those who are worried about what pronouns or name to use, do whatever feels comfortable to you for the time being. I'm still Zac, though you can just say Z, or if you feel like it, Zoey will eventually be the name that sticks. I get it, using the original name or male pronouns seems to be easier while I still present in public as a male. I don't know when the day is that I'll start going part time, as I still feel so much like a fraud, and I don't want people going "there goes a dude in a dress." Eventually I'll be full time, considering some physical changes are happening and the fat distribution is already doing its thing.
E and K, I know your big day is coming up at the tail-end of Summer, and no need to worry. No matter how much the external has changed, I will present male at the wedding. It is your day, and I can't distract from that.
To my parents, I will try to only present as male when I'm around you until full acceptance is there. While I know you're supportive, when one person transitions, we all transition. This wasn't the easiest thing to be thrown your way, but I'm appreciative of your willingness to accept your child's own happiness. I offer this to you until I go full time, as at that point I'll hopefully be able to pass or come close to passing, and then it would be awkward for me to be in guy mode.
To the friends that thought Chelle and I didn't date because I was gay? Close, but just a bit off the mark. While I was never a gay male, I am a really a lesbian. I'm glad that you all went to her to ask about me, but you could have come to me directly. Sure, I would have given a little white lie on what I was dealing with, but I just wasn't ready to come out yet.
To all those who checked in on me when I was posting about therapy and the constant doctor's visits, I appreciate your concern more than anything. Here's your answer on what was going on all that time. Transitioning should never be taken lightly, and I must thank my team of my first therapist, Mike; Dr Z who runs an amazing support group for all the amazing Trans Women on the Westside; Melissa, my therapist at the LGBT center; and Dr. Kayla at the LGBT Center. Mike, you held my hands through the first steps, learning along the way, and eventually handing me off so my best interest were treated. Melissa, I love our chats and the help you've given in the last couple sessions. And Kayla, your smile and support has been wonderful. I can't wait until my three month check up so you can see what has already blossomed. And to all the wonderful women in my support group, I love our monthly meetups.
To those friends and family that knew over the last couple months. Thank you, thank you, thank you. I've learned that I'm the exception to the rule when it comes to having a strong support system. So many lose friends, family and jobs by being their true selves. That was my biggest fear on ever coming forward, and I could have hidden this longer, but it was time to stop living a lie. Hell, I'm such a horrible actor, but I've been playing a part for the past 30+ years. Almost fucking Oscar-worthy as so many people were shocked when I told them.
To everyone who posted reactions to my photos over the last couple months, I'm glad that the happiness is shining through. The comments of "you look so happy," "Whatever you're doing, keep it up," "What type of pills are you taking? Are you okay, as you seem to be doing better than ever." While I'm not on any anti-depressants, hormones have had almost a similar affect on my mind, body and soul.
In the end, I might lose some of you, and that's a bummer. Many more of you might have questions, so feel free to leave them in the comments below, message me on FB, or shoot me a text/give me a call. I'm an open book, and I realize that this isn't just about me, but about all you wonderful people who have chosen to have me in your life. While the outside might change, the inside will remain the same. I'll still try to be that awesome person that I always strive to be. It's just so wonderful to wake up every day and finally feel some internal peace and calm. And as the changes continue and the dysphoria if further stripped away, my smiles should become even more prevalent.
Here's a short little video by SOSara that tackles ten of the myths of trans people:
10 Transgender Myths- MtF SOSara
Thank you for being in my life and for this new journey we can all go on together.
Finally Removing all the Bricks
For those who have known me a long time, y'all know I tend to keep my feelings all bundled up and keep my highs and lows well hidden. I never wanted to be a burden to anyone, but I would always reach out whenever I saw someone might be going through a tough time. Everyone would come before my own self and my own happiness, and part of that made me content in life.
I had grown accustomed to building one hell of a wall around myself and what I was dealing with. I could get through life without letting those in on what struggles were manifesting deep within my soul. I didn't want to be a Debbie Downer of any sorts, so I would wear my armor to keep me from getting hurt.
But deep down I was hurting. I was afraid. The depression would continue to grow and grow, but the armor still protected me from anyone truly knowing how sad I was inside. And by not talking about the issues at hand, it would fester and grow, so I would eat or do something else to sabotage myself. To allow layers and layers of fat to be a physical manifestation of the protective coat I would adorn.
This became my constant cycle. The battlefront that I would face day in and day out. The piles of bricks in front of me, keeping my already fragile and sad interior hidden from all, as that was the only way I knew how to cope with all this.
Then it happened. I hit rock bottom. I crashed so hard.
Around the time that this photo was taken, I didn't have any fight left in me. The battles and the lies and the fake faces I put on when I was out and about… I couldn't take it anymore. My head and my heart were so underwater I couldn't breathe anymore. And when the inner critic spoke up one night, I wanted to end it all. And in normal Zac fashion, I had to go get my final meal of a pizza and some ice cream. While I was eating that final meal I decided to do a little Googling and to possibly find some inspiration, and thankfully I found it. And there was lots and lots of it out there. What I needed to read. What I needed to hear. And more importantly, what I needed to see.
Sure, I could have called any one of the countless friends and talked through everything, but there were too many bricks and layers that surrounded me. Instead, I found solace in countless strangers on the internet. I wasn't alone. Many have come before me and learned to love themselves, to grow, and to live a truly happy life. The next morning I called my insurance and found out what sort of mental health coverage I had. I dug through local providers that would take my insurance and specialized in what has plagued me my whole life. And doing those steps was removing the first bricks in front of me.
Over the next couple months in my weekly sessions, more protective layers would be removed. Before a diagnosis was confirmed, I started opening up to some friends, which was removing more and more of the protective layers. Then removing the biggest layers of all was talking it out with some family members. As layers were pealed back, the fear would lessen. Happiness was starting to seep into my every day life that I hadn't felt in over a decade.
I would vaguely talk about this and my struggles online in hopes that it may help others. And help others it did. The countless amount of calls, texts and PMs since the end of Summer has been wonderful. I could be an ear once again to those who were struggling, even if some were just an acquaintance online. The stories of rape, eating disorders, sexuality, depression, anxiety and so many other things. The friends who would say thank you for talking about ending the stigma of depression and other mental illnesses, all while asking how I was doing. Each of these conversations helped remove more and more of the protective layer that had piled upon my soul.
I'm now 81 days in on living a wonderful life. For those who follow along on the Gram, you can go back to the beginning and see how I never smiled, but now they come through so authentically. It's no longer a facade. I truly am happy and loving life for the first time in so long. For those who don't follow me there, maybe you've noticed it on Facebook. I know some of you have, as I've been told so many times "you look so happy," "whatever you're doing, keep it up," among many other words of encouragement. For those that I've spilled the beans to I've been told some other things, but that's saved for the post going live later on April 17th.
And now that the day is rapidly approaching… I'm scared. I'm happy to be putting this out there, though I truly am frightened. Not for what people will think or if anyone will even care, but because this is the final layer. The last piece that I can hide behind, and I've never been so truthful, honest and raw at any point in my life. Once this layer is removed anyone following along will see my soul for what it is. Every single flaw. All the pain and suffering. But all that past turmoil has made me who I am today, and who I'll continue to be in the future.
I was recently asked by someone why I'm being so public with this, and it is because I must pay it forward. This post only exists because of some strangers on the internet putting their own heart and soul for all to see. Countless strangers that I'll never cross paths with, though I did get to meet one recently and told them how much their videos have meant to me, and I want to be a voice in that choir. If I can help save one life, then this is all worth it. All the pain, all the suffering, all the battles within… Just know it does get better. And just like a roller coaster, there will still be ups and downs, but that smile WILL return, just like mine has.
And if you need someone to talk to, shoot me an email here, if you have my cell it is on 24/7, a message on FB, or on Twitter. Your secrets and struggles are safe with me. Don't bottle it up like I did. The pressure will build and build until it feels like life isn't worth living anymore, but it is. Every day is precious, and it would be a little more dull if you weren't in it.
Confessions of a food addict
Addiction runs in my genes, and it's something that I've always had to battle my whole life. There has been an addiction to gambling, a slight addiction at one time to alcohol, and an addiction to smoking hookah. They've all been overcome at some point, and rarely have I slipped up, except with the exception of smoking the hookah. I tell ya, thank God I can't stand cigarettes, as the nicotine addiction is truly a devil in disguise. While smoking a single bowl of hashish, it is only the equivalency of inhaling two cigarettes. Considering a session is about 60-120 minutes, that ain't too bad. But when you do it every day, it's a problem.
But I'm digressing a bit from my original point of this post. While addiction is real, at least I can survive without that sweet taste of nicotine coated in a sweet fruit flavored molasses. BUT, the body needs food to survive. You need to nourish your body to live day after day, and even if you put the bad stuff in you, at least you're feeding your body to expend (or store) those calories. Though, I know I should eat better, and that I should stick to a diet that is best for me. The problem arises when I'm stressed. I binge eat. I consume things because my mind has told me it fills this void deep within my soul, and only that delicious concoction can satisfy that need. It has been something I've struggled with since my later years as a preteen. See, I wasn't always fat, but when my family moved and I had no friends, my comfort was coated in the decadence of ice cream, quesadillas, and string cheese. My eight year old body morphed from that of a kid with visible ribs, to shopping in the husky section over summer between third and fourth grade.
It was humiliating, here I am going into a new school, and now I'm going to be known as the fat kid. Sure, I was overweight, but it wasn't as bad as it could (and would) become. Also this was a time that I learned that the layer of fat carried on my body could be used as a protective barrier for my feelings. Someone didn't like me, it was because I was fat. If I was horrible at sports, it was because I was fat. And when hormones and puberty came into play, it could always be used as the reason why I'm single. It worked for a bit, and it was also used as another level of protection for other issues I was dealing with at the time, until 8th grade. Hormones were a flutter, girls were the basis of too many of my thoughts, and I started to lose some weight. I slimmed up. I still had some extra weight, but I was partially comfortable in my body, minus the ugly body hair. But that's a whole different post.
Through high school the weight came back on. The suppressing of issues allowed me to eat my feelings again. I wasn't popular in those years, but I wasn't a complete outcast. I had a good core group of friends, and I was content with that. The fat layer was used as an excuse as the reason I wasn't popular. It was the reason why I wasn't dating. And it was also helping me hide some internal struggles. Once again, I was addicted to food, until my senior year. It was a year of change. My first and second girlfriends. The time of "becoming a man". And between inner struggles and feeling like I should care about my body if I care for someone else, the weight came off. Part of it was due to high levels of stress. I would eat one meal a day and sometimes I would throw that up. It was a vicious cycle of me losing 24 pounds in a month and ultimately going from 204 to graduating at 159… one pound less than I started high school at.
Then depression hit. It hit so fucking hard. Inner struggles and fights. My lose of interest in school as I felt I wasn't being pushed to my fully capacity. Problems at home, even if some of them were just typical teenage angst. And the idea of my first longterm relationship falling apart. I was a mess. And one day after the feelings got lower than low, I seriously contemplated suicide. To me, there was no reason to go on. There was nothing to live for if I had to continue to fight what was inside of me, the things I hated about life, and the thought of my future crumbling. So I started writing my manifesto. I bitched. I moaned. I was so fucking emo in this thing, but I realized that writing could be cathartic and a way to let off steam. To vent those daily frustrations. And to put my thoughts out there when I wouldn't want to bother any friends with my asinine issues.
The last page, in huge letters I wrote one thing. I NEED HELP. I wanted a future. I wanted to beat this horrible moment in my life. I was at a low, but fuck, it could get better. I could hopefully climb out of this funk and hopefully live a life with a smile from time-to-time. And to this day, I must thank Robin for seeing the hurt in the letter and calling the authorities. I spent three days and some hours in a mental health facility working through some of my issues that I never explored. Sure, I didn't go through everything, as an eighteen year old doesn't know how to comprehend everything that is in the deepest recess of their mind. I saw I had friends that cared. That the family was supportive. That there was a great support network as my basis of surviving. I wouldn't have to do this alone, even if the end I was left heartbroken.
Over time the weight fluctuated up and down. Always ranging between that low weight of 158 and the high 180s. Yeah, still fat, but not completely obese. Then I fell in love with another girl. She became my everything. I still adore Christine to this day, and it makes me happy that she found her true happiness and has two little kids that she always wanted. But she allowed me to be me. She loved me for me and didn't judge anything about me. Then when the shit hit the fan in my life, I slowly pushed her away. And to this day I can't apologize enough for what I put her through, but at least she ended up happy and with everything she wanted.
With the changes going on in the personal life, the weight slowly crept up. Work also started becoming a drag. I hated what I did, and as the creative side was suppressed more and more, the weight came on and before I moved to LA, I was at 219 pounds. I was eating, but I was throwing up almost daily on my way to work. I knew a change needed to happen and I moved to LA. The land of skinny folk, which was another tough battle. I was still slinging the wireless phones, and lost a little weight, and then went to trying to write full time. Sitting on my ass, eating like shit, and not really having many friends, the weight came on, and on and on. Then I got a job where I sat on my ass for 40+ hours a week. Plus all the networking with food and alcohol. My weight continued to creep.
Then the economic collapse happened. Another go around with this sweet girl Kelly became a possibility, even though I thought it would never come to fruition. We had planned to get married in Vegas, but soon before the day, we both decided to call it quits. We barely knew one another. We hadn't spent enough time with each other over the years, and ultimately I like to think it was the best thing to happen to her. She grew. She flourished, and has become a great success in her chosen field and with an awesome husband.
But I was battling things. I was hiding from trying to be myself. I hated the way I looked, especially in the land of size zero and skinny jeans. I was an anomaly. And I decided to try to make a go at weight loss in 2010. I went up and down. I tried every diet known to man. I kept losing and gaining the same weight over and over. I was using food to cope with so many different things and I would start and stop a million times. I would waste so much money and effort on buying healthy food, only to stop for something of comfort in the drive through lane on my way home. The battle continued. I constantly lost.
In 2014 I started getting serious about my fitness. I'm starting to hit the back half of my thirties, so it's now or never. Plus I was sick often, not knowing what was causing the constant battle with countless bugs. Some of it was stress, some was depression, and part of it was even living in a building with toxic mold. My body was sick, and I was sick and tired of being over weight. I still constantly started and stopped, but the first time some people saw me after a while, they would comment on how much weight I've lost. This was only with twenty pounds gone, but it made me start to feel better about myself. I could do this! I could overcome what people push off as "it's just genetics". Though I would constantly plateau between 235 and 245 for the next year and a half.
One night I was browsing Hulu trying to find something to watch. I came across a show called My Diet is Better Than Yours, and as a fan of watching Biggest Loser, even if I feel such shows are toxic for the overweight viewers, I was hooked with one trainer and his plan. Abel James was constantly motivating his contestant. The results were phenomenal, even if these weight loss shows are truly unobtainable for the average human. They have dieticians, coaches, doctors, and are constantly being monitored. This is the reason why so many put back on the weight after they leave the programs and real life kicks back in.
Though Abel James's plan seemed simple. It's semi-paleo, and it doesn't make fat the enemy. Basically you can summarize his Wild Diet as "buying the best foods you can afford." You want a great mix of healthy fats, quality proteins, and vegetables. When I'm on plan, my calories break down to about 60% from fat, 30% from proteins and 10% from carbs. I jumped in, as the low fat craze makes for very boring food. Fat is where the flavor is, and being able to not feat fat, I was loving it. Sure, I still had my cheat meals (or days), and sometimes I had more than I should have due to stress and my food addiction, but I was losing weight.
I also got on an awesome workout plan at Orange Theory Fitness. This place kicked my ass. The first session I spent 48 minutes of the 54 minute class in a heart rate zone of 85%+, with about 18 of those minutes at 91% or above. I was out of shape, but I enjoyed the workout. I signed up for their classes, dropping an astronomical sum of $129 per month for eight classes. This is basically how much I pay per year to attend LA Fitness. Part of the problem, spending so little left very little loss if I never used it. And within my first month at OTF, I attend more workout sessions than I had in the previous five years of paying for LA Fitness. Money was a motivator for me, and if I'm going to pay that much, I might as well lose it.
So finally I'm getting my life under control. The eating is going better, even if I'm only being good about 70% of the time. Then after dropping 40 pounds in total from all my starting and stopping and this new venture, I hit a plateau. Things were stressful in my life, and some stuff I've buried starting brewing up to the surface. I started cheating more and more on my eating, and then one night my inner critic said the worst thing ever.
"No matter how much weight you lose, you'll never have the body you want."
Seriously, FUCK YOU to my inner saboteur. I hit a high point in my depression. Something I hadn't felt in years. Hell, even in over a decade since before I moved to the city of LA and Broken Dreams. This kicked me in the gut. I cried. I felt like shit, and I did what I always do when I feel like shit, I went to the store, got a large pizza and some ice cream. I ate that whole sucker to myself. Digiorno Pizza (and all other pizza brands) would like you to believe that it should be 5 servings. Ha! I laugh at your assumptions as I can easily pack this all away by myself in one sitting. We all know left over pizza doesn't taste the same when reheated, so why ruin it. Eat it all! And I did just that, along with the pint of ice cream. Over a full days calories in that short window of so many minutes. And I probably had a shitty lunch earlier in the day. If I go back at check MyFitnessPal, this will 100% be confirmed, but I'm in the zone for writing, so there's no time for research.
I felt horrible. And while I know I would never take my life, I couldn't help but feel I was in that same place I was almost 19 years earlier when I ended up in the ward. So I started writing for myself. To explore the inner depths of my mind. What is bothering me? What does my saboteur mean that "I'll never have the body I want?" I know I'm broad chested and bigger shoulders, and no matter what, I know I'll never be super skinny, as it would look weird. I can't explain it here, but in a future post I know I can dig deeper and fully express what I mean. Now is not that time, as this is food related.
So I started the writing and the tears flowed as my fingers clipped away on the keyboard. Words spewed out of me, and part of me is upset that I didn't save that file, as I'm sure it would be wonderful to reflect back on as a moment that would finally start to alter my life. The writing gave context. The words formed to tell me what I've always battled. Why I go to food. Why I use my weight as a barrier to keep my protected from outside sources. And that's when the research began.
As anyone who truly knows me, I like to go down the rabbit hole of the web. I'll start with a simple search and continue to dig, refine and read my way through all sides of the issues that I'm battling. So I started with food and addiction. I went back to the thoughts of body dysphoria from my time with the 5150. I went through and looked up other people who hated what I truly hated about myself. I went to the negative side of things for far too long, and it didn't help with all that pizza and ice cream sitting in my gut. Then I started to come out the other end of the spiral. I started to find people that tackled the issue at hand and work to truly make themselves happy.
I ended up in this awesome loop of videos on YouTube that showed me I wasn't alone. That my story was similar to many that battle this every day of their life until they say enough is enough. Sure, not all were the same story, but the biggest motivator was seeing when the person in the video went from being depressed with their situation, to fully living life. Not only did their smiles change from those of being forced to actually being genuine, but most had a new light in their eyes. The pain was finally gone, while not completely with some, but you could finally see the shift of the interior soul. And then I saw the video that would finally give me hope. No, I won't post it here, but I will in a future long-winded spiel. I promise.
The next step would be therapy. I would start to address my issues. The ones buried under years of hiding, the love-hate relationship with food, the battle with my body, and anything else that I could uncover in my weekly sessions. It was easy to navigate my insurance's website to find someone nearby that would have a specialty in all my messed up issues. And I found him. If you need a good guy in LA, let me know and I'll pass along his information privately. That first session was scary for me. I almost threw up on the way there, but alas I sat across from a stranger and let the words flow, just like I am now, and the tears would follow. While talking about some things that bothered me, I learned I smile as a defensive mechanism to try and hide the pain. And as I saw the clock was counting down, I mentioned the biggest thing bothering me. Something that I never said out loud, and it felt freeing. And in the following weeks we've started working through all the issues and I can't tell you how refreshing it is. Tracking on my sleep shows I'm less restless and my resting heart rate has gone back down.
Yet the food has still been a battle sometimes. I stress eat and I eat things that I know are harming my body. I KNOW I feel better when I cut out gluten, but the best pizza isn't gluten free nor are the best hamburger buns. I know the brain fog is gone when I avoid it. I know the lethargic nature is non-existent when I eat this way. But yet I also wreck my progress. I always let that inner voice cause me to slip up more than I should. Then I do my weekly official weigh-in, and then I feel down again. It's a never ending cycle that I want to improve, yet for some reason I couldn't.
Finally, I can't slip up anymore. I have to make changes and change my way of thinking. Not because I want to, but because part of my healthy has deteriorated. I ended up with walking pneumonia a few weeks back and was put on antibiotics. Not the normal Penicillin or Amoxicillin as I have an allergy to those two, but one that I need to eat with, otherwise my stomach becomes a mess. So as I'm relegated to bed rest to kick this to the curb, I'm still keeping my calories up to avoid stomach issues. Then, a couple days later I ended up having a pain in my lower abdomen. I went back to urgent care and after the doc touched my gut, he quickly had me head to the ER to check for appendicitis. Here I am, bed ridden and now probably having to go under the knife to remove this thing that is possibly killing me. My mind was a wreck, but once the CT scan was done, I was told it was diverticulitis.
What is that you may ask? It's an inflammation of the gut, and I'll leave it at that, as I don't know the last time you ate anything. And as a foodie, I know how important it is to keep that delicious food down. Can't let it all go to waste. I was put on a liquid diet, one that I also included protein shakes so I wouldn't lose too much muscle while I had more days of bed rest added to my new set of antis. I did my research. I went down the rabbit hole of this disease, but so much information conflicts with other information. Small seeds are bad. No they're not. Surgery is the only option. Diet could keep you from undergoing surgery. Then I found out a writer I knew was misdiagnosed with the disease but then found out it really was colon cancer. I wish he was still around as I'd love to ask him his symptoms. But alas, he lost his battle with the disease earlier this year.
Thankfully my insurance got me into a GI specialist. I'll be going under the scope soon to make sure the diagnosis is what the CT scan said, but I'm still stressed about it. The doc also talked over my other digestive issues and is assuming I'm lactose intolerant. It's a bummer he won't run an allergy test, but instead he prescribed an AIP Diet. Basically you cut out everything that could be an irritant or something you're allergic to. No grains, no eggs, no dairy, no night shades, limited fruit. I also need to make sure what I'm eating is low in FODMAPS as some of those could also be the bastard who is causing my gut (and body) so much pain. This will be followed for 4 to 8 weeks, or whenever my gut and body finally feels better. At that point I could slowly start to reintroduce different things (though they advise to still always avoid gluten), so I'll probably start with cheese, as my food addicted brain is causing my mouth to go all Pavlov just typing out this sentence.
So while it sucks that my body has gone into such a broken down state that it is causing so much hurt within the body and the soul, at least I know I HAVE to follow this eating pattern to the T. I can't cheat on a meal. I have to avoid the chocolate, the sugar, the pizza. Avoid the stuff that makes this fatty want to eat. I have to find the culprit and lock it away, otherwise I WILL never have that body I want. I will never being running at one hundred percent, partially due to the decades of neglect, but at least I can get it running as smoothly as possible. There is a bright light at the end of this tunnel. And while I won't be able to have everything I've loved ever again, some stuff I can still keep around if it isn't that dang thing my body just doesn't compute with.
So this food addict he did what he always does. I went and had all my favorite meals over the last couple days like a dead man walking. I had the pepperoni pizza. I savored every bite of the garlic burger from Coral Cafe. I had Baskin Robins Gold Medal Ribbon. I had some carne asada nachos from this little hole-in-the-wall spot on Santa Monica that I don't know the name of. I ate these meals. I savored every bite. And before and after every single meal, I meditated. I wrote about the meal. I wrote what I liked, but I also listed why it is bad for me. Why it is harming me from the inside out. I waved goodbye for now, and if they aren't one of the bad stimulants, I'll have you again. But I know, I know my body deserves to be treated with respect. There's only so many years here on this planet, and I'm slowly working on healing my mind (


text:
How to Beat the Heat in the Foothills: Rafting the Mokelumne River
The Sierra Nevada Foothills are home to California's Gold Country, an area predominantly known for the historic gold mines that attracted a massive influx of immigrants to the west. Here are some other things it one might say the California Gold Country is known for:
- It is hot in the summer.
- Really, sometimes the Gold Country is hot like molten gold hot.
- This might sound like hyperbole, but the sun above the Gold Country could be mistaken the mythical figure Midas, because everything it touches turns into a golden dry crisp.
- Just checked outside: The Sun is Midas. It is hot out there.
That isn't to say it is all bad, you just need to know the cool (I mean that literally) places to go.
Mokelumne Hill is a small gold country town located South of Highway 88 (Ebbetts Pass). It is pretty easy to blink and miss it while traveling along Highway 49. Just north of the town is the Mokelumne River, which is a critical part of the East Bay's water supply. The Mokelumne River is one of those cool Gold Country places to check out.
Rafting the Electra – Middle Bar Run, Mokelumne CA
Put-In: East Bay Municipal Utilities District has created a nice paved road down to the Big Bar River Launch. To get to the access follow 49 north past Mokelumne Hill, descending into the Mokelumne river canyon (it's windy) Right after the Mokelumne during on the North side turn right onto the access road. It narrow windy ride down to the beach. Map
Take Out: We took out at the Middle Bar Bridge, which also has a nice parking area, latrine, picnic situation provided by East Bay MUD. For pick-up or car drop off this can be found by continuing north on 49 past the river and up to the first paved road on the left. It is a longer drive down to the Take-out. No swimming is allowed in the drinking water supply. Map
Distance: 6 miles or about 90 minute to 2 hours on the water
The stretch of the Mokelumne river from Electra to Middle bar is a fun quick class II-III rafting trip. Normally the river isn't run by any of the rafting guides, but I had jumped at the chance to get out there with OARs during a charity trip that benefited the Calaveras Youth Mentoring Program.
During mid May, when I did this trip, the river flows reached above some vegetation but not so high as to whisk us the river too fast. The Mokelumne river canyon is not as narrow or massive here as the Tuolumne – and reminded me somewhat of the rivers back in the Midwest. The handful of rapids still provided just enough of the white water experience let me know I was still in California, blending the best of both a leisurely nature trip and physical rafting adventure. And, since this is a short one, go ahead and make breakfast and dinner plans, you have the time!
Alternatively if you don't have the rafting know-how or (friends with know-how), the beach access point at the Electra put-in is a nice easily accessible little resource for quick swim. I will have to keep this river access in mind if I need to stretch my legs during a hot day's drive down Highway 49

subset: commoncrawl


text:
The bright and gay colours of the greenhouse calceolarias with their curious. Pouched flowers always attract attention in the spring. Plants can be raised easily from seed sown from May to July, the earliest sowings providing plants for flowering in April, May and early June of the following year.
Seed Sowing
The seed should be sown on the surface of sifted seed compost, and because the seed is so fine, no covering of compost is required. The pots should be covered with a sheet of glass and stood in a cold frame until germination takes place, usually within ten days. The resulting seedlings should then be pricked out into boxes and, before they become too large, be moved again into 3-in. pots of John Innes No. 1 Potting Compost. In October another move into 5-in. pots can be given. Using a similar compost.
During the winter the plants are happy in a minimum temperature of 7°C. (45°F.) – they do not like high temperatures – but the air must be kept fairly dry by careful ventilation. Water should be given sparingly at all times, and during winter it must be kept off the leaves and crowns of the plants as much as possible, or damping off may occur.
I like to give the plants another move to 6-in. pots in February to obtain really good specimen plants. This is well worth doing if there is sufficient space available in the greenhouse. Plants measuring 2 ft. or more across can thus be obtained.
When I am aiming to grow very large specimens, 1 water the plants once with I oz. Of nitrate of soda dissolved in a gallon of water just when they are beginning to show their flower buds. From then onwards feeding the plants once a week with a liquid or soluble fertiliser until they begin to flower will benefit them considerably.
Pest Control
Greenfly are often a nuisance on calceolarias and as soon as the first signs of this pest are seen fumigate with nicotine shreds or BHC smoke pellets. Alternatively, use a systemic insecticide as a control.


text:
We are offering Yellow Maize. product details: type : corn glutinous glutinous style: dried drying process: ad cultivation type: common color: yellow length (cm): 5 maturity: full matured certification: phytosanitory weight (kg): 50 place of origin: tamilnadu, india brand name: indian yellow maize.
Sarayu Impex Pvt. Ltd.
Plot No. 20, Anbu Nagar, Airport (post), Tamil Nadu - 620007, India
Catamaraan Overseas
No-6,moogambigai Nagar,second Street,melakalkandar Kottai,trichy-620011, Tamil Nadu - 620011, India
Yellow Maize is one of the highly demanded products of our company. Maize that we offer is widely used to prepare variety of dishes. Our Yellow Maize is grown using advanced agricultural practices to ensure supreme quality. Our maize can also be used for animal feed due to its high nutritional value. We provide Yellow Maize in both small and bulk quantities according to the requirement of buyers.
Skk Exports
West Street, Tamil Nadu - 621803, India
Deals in Yellow Maize, Areca Leaf Plates, Jasmine Flowers, Raw Cashews
Shri Vari Exports
3 233 Perumal Malai Adivaram Sorathur Po Thuraiyur. Tk Trichy. Dot Thiruchirapalli - 621002 Tamil Nadu India, Tamil Nadu , India
We have established ourselves as a well-known Yellow Maize Manufacturer, Exporter and Supplier in Tiruchirappalli, Tamil Nadu. Grown on the fertile land, Yellow Maize is picked fresh from the field to get processed further. We use natural manure to keep the Yellow Maize free from harmful effects of chemical fertilizers. We also avoid excessive use of pesticides to keep the Yellow Maize safe for consumption.
Sarayu Impex Pvt. Ltd.
Plot No. 20, Anbu Nagar, Airport (post), Tamil Nadu - 620007, India


text:
Archive for the 'c#' tag
C#: StackTrace
Dermot and I were doing a bit of work on a mini testing DSL that we've been writing to try and make some of our interaction tests a bit more explicit and one of the things that we wanted to do was find out which method was being called on one of our collaborators.
We have a stub collaborator which gets injected into our system under test. It looks roughly like this:
public class StubCollaborator : IGotForcedToCollaborate { public double Method1() { return CannedValue(); } public double Method2() { return CannedValue(); } private double CannedValue() { return 10; } }
We wanted to try and capture which of the methods on that object had been called by our system under test and then assert on that value from our test.
While trying to work out how to do this we came across the 'StackTrace' object. We use it like so to work out which public method on that object has been called:
public class StubCollaborator : IGotForcedToCollaborate { private MethodBase methodCalled; .. private double CannedValue() { methodCalled = new StackTrace().GetFrames() .Select(f =>f.GetMethod()) .Where(m => m.DeclaringType.Name == GetType().Name) .Where(m => m.IsPublic) .First() return 10; } public string GetMethodCalled() { return methodBase.Name; } }
We needed to only find the public methods because 'CannedValue' was showing up on the stack trace and since it's private this was an easy way to exclude it.
I'm sure there are other ways to get this type of information but we were able to solve our problem really quickly with this solution.
C#: A failed attempt at F#-ish pattern matching
A few weeks ago we had some C# code around calcuations which had got a bit too imperative in nature.
The code looked roughly like this:
public class ACalculator { public double CalculateFrom(UserData userData) { if(userData.Factor1 == Factor1.Option1) { return 1.0; } if(userData.Factor2 == Factor2.Option3) { return 2.0; } if(userData.Factor3 == Factor3.Option2) { return 3.0 } return 0.0; } }
I think there should be a more object oriented way to write this code whereby we push some of the logic onto the 'UserData' object but it struck me that it reads a little bit like pattern matching code you might see in F#.
I decided to drive the code to use a dictionary which would store functions representing each of the conditions in the if statements:
public class ACalculator { private Dictionary<Func<UserData, bool>, double> calculations; public ACalculator() { calculations = new Dictionary<Func<UserData,bool>,double> { {u => u.Factor1 == Factor1.Option1, 1.0}, {u => u.Factor2 == Factor2.Option3, 2.0}, {u => u.Factor3 == Factor3.Option2, 3.0} }; } public double CalculateFrom(UserData userData) { var calculation = calculations.Keys.FirstOrDefault(calc => calc(userData)); if(calculation != null) { return calculations[calculation]; } return 0.0; } }
It's less readable than it was before and it's not obvious that the adding of the functions to the dictionary needs to be in that order in order for it to work.
I've simplified the real example a bit to show the idea but I don't think it works as the best abstraction in this situation either way although it was an interesting experiment.
C#: Using a dictionary instead of if statements
A problem we had to solve on my current project is how to handle form submission where the user can click on a different button depending whether they want to go to the previous page, save the form or go to the next page.
An imperative approach to this problem might yield code similar to the following:
public class SomeController { public ActionResult TheAction(string whichButton, UserData userData) { if(whichButton == "Back") { // do the back action } else if(whichButton == "Next") { // do the next action } else if(whichButton == "Save") { // do the save action } throw Exception(""); } }
A neat design idea which my colleague Dermot Kilroy introduced on our project is the idea of using a dictionary to map to the different actions instead of using if statements.
public class SomeController { private Dictionary<string, Func<UserData,ActionResult>> handleAction = new Dictionary<string, Func<UserData,ActionResult>> { { "Back", SaveAction }, { "Next", NextAction }, { "Save", SaveAction } }; public ActionResult TheAction(string whichButton, UserData userData) { if(handleAction.ContainsKey(whichButton)) { return handleAction[whichButton](userData); } throw Exception(""); } private ActionResult NextAction(UserData userData) { // do cool stuff } }
It's quite similar in a way to a problem we had on another project where we needed to deal with user inputs and then create an object appropriately.
The way we have to read the code is a bit more indirect than with the original approach since you now need to click through to the individual methods for each action.
On the other hand I like the fact that we don't have if statements all over the place anymore.
* Updated * – updated to take Dhananjay Goyani's comments into account
Functional C#: An imperative to declarative example
I wrote previously about how we've been working on some calculations on my current project and one thing we've been trying to do is write this code in a fairly declarative way.
Since we've been test driving the code it initially started off being quite imperative and looked a bit like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
public class TheCalculator { ... public double CalculateFrom(UserData userData) { return Calculation1(userData) + Calculation2(userData) + Calculation3(userData); } public double Calculation1(UserData userData) { // do calculation stuff here } public double Calculation2(UserData userData) { // do calculation stuff here } ... }
What we have on line 7 is a series of calculations which we can put in a collection and then sum together:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class TheCalculator { ... public double CalculateFrom(UserData userData) { var calculations = new Func<UserData, double>[] { Calculation1, Calculation2, Calculation3 }; return calculations.Sum(calculation => calculation(userData)); } public double Calculation1(UserData userData) { // do calculation stuff here } ... }
We can pull out a 'Calculation' delegate to make that a bit more readable:
public class TheCalculator { private delegate double Calculation(UserData userData); public double CalculateFrom(UserData userData) { var calculations = new Calculation[] { Calculation1, Calculation2, Calculation3 }; return calculations.Sum(calculation => calculation(userData)); } ... }
One of the cool things about structuring the code like this is that if we want to add a new Calculation we can just go to the end of the array, type in the name of the method and then Resharper will create it for us with the proper signature.
We eventually came across some calculations which needed to be subtracted from the other ones, which seems like quite an imperative thing to do!
Luckily Christian saw a way to wrap these calculations in a 'Subtract' function so that we could stay in declarative land:
public class TheCalculator { private delegate double Calculation(UserData userData); public double CalculateFrom(UserData userData) { var calculations = new [] { Calculation1, Calculation2, Calculation3, Subtract(Calculation4) }; return calculations.Sum(calculation => calculation(userData)); } ... public Calculation Subtract(Calculation calculation) { return userData => calculation(userData) * -1; } }
Having a method which explicitly has the 'Calculation' signature allows us to remove it from the array declarative which is pretty neat.
We can also change the method signature of 'Subtract' to take in a variable number of calculations if we need to:
public class TheCalculator { ... public double CalculateFrom(UserData userData) { var calculations = new [] { Calculation1, Calculation2, Calculation3, Subtract(Calculation4, Calculation5) }; return calculations.Sum(calculation => calculation(userData)); } public Calculation Subtract(params Calculation[] calculations) { return userData => calculations.Sum(calculation => calculation(userData)) * -1; } }
The other nice thing about coding it this way is that we ran into a problem where when we fed real data through the code we were getting the wrong values returned and we wanted to understand where it was falling down.
We could easily temporarily add in a 'Console.WriteLine' statement like this to help us out:
public class TheCalculator { ... public double CalculateFrom(UserData userData) { var calculations = new [] { Calculation1, Calculation2, Calculation3, Subtract(Calculation4, Calculation5) }; return calculations .Select(calculation => { Console.WriteLine(calculation.Method.Name + " = " + calculation(userData)); return calculation; }) .Sum(calculation => calculation(userData)); } ... }
It then printed the results down the page like so:
Calculation1: 23.34 Calculation2: 45.45 ...
Functional C#: Using custom delegates to encapsulate Funcs
One of the problems that I've frequently run into when writing C# code in a more functional way is that we can often end up with 'Funcs' all over the place which don't really describe what concept they're encapsulating.
We had some code similar to this where it wasn't entirely obvious what the Func being stored in the dictionary was actually doing:
public class Calculator { private Dictionary<string, Func<double, double, double>> lookups = new Dictionary<string, Func<double, double, double>>(); public Blah() { lookups.Add("key", (input1, input2) => (input1 * 0.1) / input2); } ... }
Christian pointed out that we can create a named delegate (something I had completely forgotten!) so that it's a bit more obvious what exactly we're storing in the dictionary just by looking at the code.
We'd then end up with this code:
public class Calculator { private delegate double PremiumCalculation(double input1, double input2); private Dictionary<string, PremiumCalculation> lookups = new Dictionary<string, PremiumCalculation >(); public Calculator() { lookups.Add("key", (input1, input2) => (input1 * 0.1) / input2); } ... }
Now it's pretty clear from just reading the declaration of 'lookups' what it's being used for without needing to go further into the code to understand that.
This is just a simple example but the problem becomes more obvious the more angle brackets we end up with in our dictionary definition and pulling those Funcs out makes the code much easier to understand.
Functional C#: Continuation Passing Style
Partly inspired by my colleague Alex Scordellis' recent post about lambda passing style I spent some time trying out a continuation passing style style on some of the code in one of our controllers to see how different the code would look compared to its current top to bottom imperative style.
We had code similar to the following:
public ActionResult Submit(string id, FormCollection form) { var shoppingBasket = CreateShoppingBasketFrom(id, form); if (!validator.IsValid(shoppingBasket, ModelState)) { return RedirectToAction("index", "ShoppingBasket", new { shoppingBasket.Id }); } try { shoppingBasket.User = userService.CreateAccountOrLogIn(shoppingBasket); } catch (NoAccountException) { ModelState.AddModelError("Password", "User name/email address was incorrect - please re-enter"); return RedirectToAction("index", ""ShoppingBasket", new { Id = new Guid(id) }); } UpdateShoppingBasket(shoppingBasket); return RedirectToAction("index", "Purchase", new { Id = shoppingBasket.Id }); }
The user selects some products that they want to buy and then just before they click to go through to the payment page we have the option for them to login if they are an existing user.
This code handles the server side validation of the shopping basket and tries to login the user. If it fails then we return to the original page with an error message. If not then we forward them to the payment page.
With a continuation passing style we move away from the imperative style of programming whereby we call a function, get a result and then do something with that result to a style where we call a function and pass it a continuation/block of code which represents the rest of the program. After it has calculated the result it should call the continuation.
If we apply that style to the above code we end up with the following:
public ActionResult Submit(string id, FormCollection form) { var shoppingBasket = CreateShoppingBasketFrom(id, form); return IsValid(shoppingBasket, ModelState, () => RedirectToAction("index", "ShoppingBasket", new { shoppingBasket.Id} ), () => LoginUser(shoppingBasket, () => { ModelState.AddModelError("Password", "User name/email address was incorrect - please re-enter"); return RedirectToAction("index", ""ShoppingBasket", new { Id = new Guid(id) }); }, user => { shoppingBasket.User = user; UpdateShoppingBasket(shoppingBasket); return RedirectToAction("index", "Purchase", new { Id = shoppingBasket.Id }); })); } private RedirectToRouteResult IsValid(ShoppingBasket shoppingBasket, ModelStateDictionary modelState, Func<RedirectToRouteResult> failureFn, Func<RedirectToRouteResult> successFn) { return validator.IsValid(shoppingBasket, modelState) ? successFn() : failureFn(); } private RedirectToRouteResult LoginUser(ShoppingBasket shoppingBasket, Func<RedirectToRouteResult> failureFn, Func<User,RedirectToRouteResult> successFn) { User user = null; try { user = userService.CreateAccountOrLogIn(shoppingBasket); } catch (NoAccountException) { return failureFn(); } return successFn(user); }
The common theme in this code seemed to be that there we both success and failure paths for the code to follow depending on the result of a function so I passed in both success and failure continuations.
I quite like the fact that the try/catch block is no longer in the main method and the different things that are happening in this code now seem grouped together more than they were before.
In general though the way that I read the code doesn't seem that different.
Instead of following the flow of logic in the code from top to bottom we just need to follow it from left to right instead and since that's not as natural the code is more complicated than it was before.
I do understand how the code works more than I did before I started playing before this but I'm not yet convinced this is a better approach to designing code in C#.
Functional C#: Using Join and GroupJoin
An interesting problem which I've come across a few times recently is where we have two collections which we want to use together in some way and get a result which could either be another collection or some other value.
In one which Chris and I were playing around with we had a collection of years and a collection of cars with corresponding years and the requirement was to show all the years on the page with the first car we found for that year or an empty value if there was no car for that year.
We effectively needed to do a left join on the cars collection.
This is an imperative way of solving the problem:
public class Car { public int Year { get; set; } public string Description { get; set; } }
var years = new[] { 2000, 2001, 2002, 2003 }; var cars = new[] { new Car { Year = 2000, Description = "Honda" }, new Car { Year = 2003, Description = "Ford" } }; var newCars = new List<Car>(); foreach (var year in years) { var car = cars.Where(x => x.Year == year).FirstOrDefault() ?? new Car { Year = year, Description = ""}; newCars.Add(car); }
We can actually achieve the same result in a more declarative way by making use of 'GroupJoin':
var newCars = years.GroupJoin(cars, year => year, car => car.Year, (year, theCars) => theCars.FirstOrDefault() ?? new Car { Year = year, Description = "" });
'GroupJoin' is useful if we want to keep all of the items in the first collection and get a collection of the items in the second collection which match for the specified keys.
In this case it allows us to identify where there are no matching cars for a specific year and then just set a blank description for those years.
One nice side effect is that if we later want to include multiple cars for a year then we shouldn't have to change the code too much to achieve that.
Another example which I came across is where we have one collection which contains filter criteria which it needs to apply against the other collection.
We have a collection of years and need to indicate whether there is a matching car for each of those years.
[Test] public void JoinExample() { var years = new[] { 2000, 2003 }; var cars = new[] { new Car { Year = 2000, Description = "Honda" }, new Car { Year = 2003, Description = "Ford" }, new Car { Year = 2003, Description = "Mercedes"}}; Assert.That(AreThereMatchingCars(years, cars), Is.True); }
public bool AreThereMatchingCars(IEnumerable<int> years, IEnumerable<Car> cars) { foreach (var year in years) { if(cars.Where(c => c.Year == year).Count() == 0) { return false; } } return true; }
We can rewrite this function like so:
public bool AreThereMatchingCars(IEnumerable<int> years, IEnumerable<Car> cars) { var distinctCars = cars.GroupBy(x => x.Year).Select(x => x.First()); return years.Join(distinctCars, y => y, c => c.Year, (y, c) => c).Count() == years.Count(); }
This actually become more complicated than we expected because we were working out if there were matching cars for each of the specified years by checking the number of filter items and then comparing it to the number of items when we joined that collection with our collection of cars.
If we have more than one car for the same year that logic falls down so we needed to get just one car per year which is what the first line of the function does.
I can't decide whether or not the code is easier to read and understand by making use of these functions but it's an approach that I picked up when playing around with F# so it's interesting that it can still be applied in C# code as well.
C#: Overcomplicating with LINQ
I recently came across an interesting bit of code which was going through a collection of strings and then only taking the first 'x' number of characters and discarding the rest.
The code looked roughly like this:
var words = new[] {"hello", "to", "the", "world"}; var newWords = new List<string>(); foreach (string word in words) { if (word.Length > 3) { newWords.Add(word.Substring(0, 3)); continue; } newWords.Add(word); }
For this initial collection of words we would expect 'newWords' to contain ["hel", "to", "the", "wor"]
In a way it's quite annoying that the API for 'Substring' throws an exception if you try and get just the first 3 characters of a string which contains less than 3 characters. If it didn't do that then we would have an easy 'Select' call on the collection.
Instead we have an annoying if statement which stops us from treating the collection as a whole – we do two different things depending on whether or not the string contains more than 3 characters.
In the spirit of the transformational mindset I tried to write some code using functional collection parameters which didn't make use of an if statement.
Following this idea we pretty much have to split the collection into two resulting in this initial attempt:
var newWords = words .Where(w => w.Length > 3) .Select(w => w.Substring(0, 3)) .Union(words.Where(w => w.Length <= 3).Select(w => w));
This resulted in a collection containing ["hel", "wor", "to", "the"] which is now in a different order to the original!
To keep the original order I figured that we needed to keep track of the original index position of the words, resulting in this massively overcomplicated version:
var wordsWithIndex = words.Select((w, index) => new { w, index }); var newWords = wordsWithIndex .Where(a => a.w.Length >= 3) .Select((a, index) => new {w = a.w.Substring(0, 3), a.index}) .Union(wordsWithIndex.Where(a => a.w.Length < 3).Select(a => new { a.w, a.index })) .OrderBy(a => a.index);
We end up with a collection of anonymous types from which we can get the transformed words but it's a far worse solution than any of the others because it takes way longer to understand what's going on.
I couldn't see a good way to make use of functional collection parameters to solve this problem but luckily at this stage Chris Owen came over and pointed out that we could just do this:
var newWords = words.Select(w => w.Length > 3 ? w.Substring(0, 3) : w);
I'd been trying to avoid doing what is effectively an if statement inside a 'Select' but I think in this case it makes a lot of sense and results in a simple and easy to read solution.
C#: A lack of covariance with generics example
One of the things I find most confusing when reading about programming languages is the idea of covariance and contravariance and while I've previously read that covariance is not possible when using generics in C# I recently came across an example where I saw that this was true.
I came across this problem while looking at how to refactor some code which has been written in an imperative style:
public interface IFoo { string Bar { get; set; } } public class Foo : IFoo { public string Bar { get; set; } }
private IEnumerable<IFoo> GetMeFoos() { var someStrings = new[] { "mike", "mark" }; var someFoos = new List<IFoo>(); foreach (var s in someStrings) { someFoos.Add(new Foo { Bar = s }); } return someFoos; }
I changed the code to read like so:
private IEnumerable<IFoo> GetMeFoos() { var someStrings = new[] { "mike", "mark" }; return someStrings.Select(s => new Foo { Bar = s }); }
Which fails with the following compilation error:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Test.Foo>' to 'System.Collections.Generic.IEnumerable<Test.IFoo>'. An explicit conversion exists (are you missing a cast?)
I thought the compiler would infer that I actually wanted a collection of 'IFoo' given that I was returning from the method directly after the call to Select but it doesn't.
As I understand it the reason that we can't downcast an IEnumerable of 'Foo' to an IEnumberable of 'IFoo' is that we would run into problems if we worked of the assumption that our original collection only contained Foos in it later on in our program.
For example it would be possible to add any item which implemented the 'IFoo' interface into the collection even if it wasn't a 'Foo':
// this code won't compile List<Foo> foos = new List<Foo>(); // add some foos List<IFoo> ifoos = foos; foos.Add(new SomeOtherTypeThatImplementsIFoo());
It's not possible to convert 'SomeOtherTypeThatImplementsIFoo' to 'Foo' so we would run ourself into problems.
Rick Byers has a post from a few years ago where he explains how this works in more detail and also points out that covariance of generics is actually supported by the CLR, just not by C#.
In the case I described we can get around the problem by casting 'Foo' to 'IFoo' inside the 'Select':
private IEnumerable<IFoo> GetMeFoos() { var someStrings = new[] { "mike", "mark" }; return someStrings.Select(s => (IFoo) new Foo { Bar = s }); }
C#: Causing myself pain with LINQ's delayed evaluation
I recently came across some code was imperatively looping through a collection and then mapping each value to go to something else by using an injected dependency to do that.
I thought I'd try to make use of functional collection parameters to try and simplify the code a bit but actually ended up breaking one of the tests.
About a month ago I wrote about how I'd written a hand rolled stub to simplify a test and this was actually where I caused myself the problem!
The hand rolled stub was defined like this:
public class AValueOnFirstCallThenAnotherValueService : IService { private int numberOfCalls = 0; public string SomeMethod(string parameter) { if(numberOfCalls == 0) { numberOfCalls++; return "aValue"; } else { numberOfCalls++; return "differentValue"; } } }
The test was something like this:
[Test] public void SomeTest() { var fooOne = new Foo { Bar = "barOne" }; var fooTwo = new Foo { Bar = "barTwo" }; var aCollectionOfFoos = new List<Foo> { fooOne, fooTwo }; var service = new AValueOnFirstCallThenAnotherValueService(); var someObject = new SomeObject(service); var fooBars = someObject.Method(aCollectionOfFoos); Assert.That(fooBars[0].Other, Is.EqualTo("aValue")); // and so on }
The object under test looked something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
public class SomeObject { private IService service; public SomeObject(IService service) { this.service = service; } public IEnumerable<FooBar> Method(List<Foo> foos) { var fooBars = new List<FooBar(); foreach(var foo in foos) { fooBars.Add(new FooBar { Bar = foo.Bar, Other = service.SomeMethod(foo.Bar) }; } // a bit further down var sortedFooBars = fooBars.OrderBy(f => f.Other); return fooBars; } }
I decided to try and incrementally refactor the code like so:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public class SomeObject { ... public IEnumerable<FooBar> Method(List<Foo> foos) { var fooBars = foos.Select(f => new FooBar { Bar = f.Bar, Other = service.SomeMethod(f.Bar) }; // a bit further down var sortedFooBars = fooBars.OrderBy(f => f.Other); return fooBars; } }
I ran the tests after doing this and the test I described above failed – it was expecting a return value for 'Other' of 'aValue' but was actually returning 'differentValue'.
I was a bit confused about what was going on until I started watching what the test was doing through the debugger and realised that on the 'OrderBy' call on line 10 the 'Select' call on line 7 was being reevaluated which meant that the value returned by 'service.SomeMethod' would be 'differentValue' since it was being called for the 3rd and 4th time and it's set up to return 'aValue' only on the 1st time.
The way to get around this problem was to force the evaluation of 'fooBars' to happen immediately by calling 'ToList()':
1 2 3 4 5 6 7 8 9 10 11
public class SomeObject { ... public IEnumerable<FooBar> Method(List<Foo> foos) { var fooBars = foos.Select(f => new FooBar { Bar = f.Bar, Other = service.SomeMethod(f.Bar) }.ToList(); ... } }
In this case it was fairly easy to identify the problem but I've written similar code before which has ended up reordering collections with thousands of items in because it's been lazy evaluated every time the collection is needed.
In Jeremy Miller's article about functional C# he suggests the idea of memoization as an optimisation technique to stop expensive calls being made more times than they need to be so perhaps this would be another way to solve the problem although I haven't tried that approach before.


text:
Our fields are full of clover, but it takes time and persistence to find a four-leafed one. You could say the same of our Four Leaf Clover in the field of many cheddars. We have a larger inventory of our cheddar style since we are processing all of our milk. We age out our cheddar, only selling the youngest available batch as Clover. All of the rest matures in our cellars.
In our 45°F cellar, our Four Leaf Clover wheels mature for 12-16 months. As a result of the longer maturation, these wheels are full of flavor. Some even develop the calcium crystals that are a sign of high-quality aged cheese. According to one chef, our aged Cheddar is world-class and as good as cheddar from England that cost three times as much.
We cut up most of these wheels of Four Leaf Clover for sales at our farmers markets. We have set aside a few wheels set aside to mature for wholesale customers as well. Let us know if you would like to add it add to your restaurant's menu.


text:
Encorpada Classic W01 Regular Fonts
<link href="//db.onlinewebfonts.com/c/bcd7e4ec736f4563ce9abe65606fdd54?family=EncorpadaClassicW01-Regular" rel="stylesheet" type="text/css"/>#2 Using @import CSS directive, put the following line in add to your css file.(http | https)
@import url(//db.onlinewebfonts.com/c/bcd7e4ec736f4563ce9abe65606fdd54?family=EncorpadaClassicW01-Regular);#3 Use font-face declaration Fonts.(http | https)
@font-face {font-family: "EncorpadaClassicW01-Regular"; src: url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.eot"); src: url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.eot?#iefix") format("embedded-opentype"), url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.woff2") format("woff2"), url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.woff") format("woff"), url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.ttf") format("truetype"), url("//db.onlinewebfonts.com/t/bcd7e4ec736f4563ce9abe65606fdd54.svg#EncorpadaClassicW01-Regular") format("svg"); }
Copyright 2013 by Eduilson Coan. All rights reserved.
Bodoni Seventytwo ITC W01 Bd
International Typeface CorporationTrademark
ITC is a trademark of International Typeface Corporation Registered in the U.S. Patent and Trademark Office and may be registered in certain jurisdictions; Bodoni is a trademark of International Typeface Corporation and may be registered inCopyright
Copyright (C) 1994, 2007 International Typeface Corporation. All Rights Reserved.License
NOTIFICATION OF LICENSE AGREEMENTThis typeface is the property of International Typeface Corporation (ITC) and its use by you is covered under the terms of a license agreement. You have obtained this typeface software either directly from ITC or together with software distributed by one of the licencees of ITC.This software is a valuable asset of ITC. Unless you have entered into a specific license agreement granting you additional rights, your use of this software is limited to use on up to five (5) workstation for your own publishing use. You may not copy or distribute this software.If you have any questions concerning your rights you should review the license agreement you received with the software or contact ITC for a copy of the license agreement.General information:www.itcfonts.comFor license terms and usage rights, please visit our web site at:www.itcfonts.com/license
Spud W00 Bold Upright
Australian Type FoundryAuthor
Wayne ThompsonTrademark
Spud BoldUpright is a trademark of Australian Type Foundry.Copyright
Copyright (c) 2006 by Australian Type Foundry. All rights reserved.Description
Copyright (c) 2006 by Australian Type Foundry. All rights reserved.License
END USER LICENCE AGREEMENTEach font purchased from Australian Type Foundry (ATF) is licensed for use on 5 personal computers within the purchasing organisation. The end user agrees to receive purchased product from ATF via email transmission unless otherwise specified on the ATF website. The end user agrees NOT to use fonts purchased from ATF for any purpose, commercial, public, personal or otherwise, which constitues an illegal act or an incitement to racial, sexual or gender vilification or any other discriminatory or illegal purposes. The end user agrees not to copy, transmit, reproduce, or imitate any product purchased from ATF for any user outside the purchasing organisation or for any public or commercial purpose, unless permission in writing is obtained from ATF. The end user agrees not to modify the digital construction or coding of fonts purchased from ATF. Copyright and intellectual property remain the sole property of ATF after purchase. By purchasing from ATF you agree to these terms and conditions.ATF warrants to you that the software will perform satisfactorily for the ninety (90) day period following your receipt of the software. This warranty does not apply to font software converted into other formats by the end user. To make a warranty claim, you must return the software to the location where you obtained it along with a copy of your sales receipt within such ninety (90) day period. If the software does not perform satisfactorily, ATF reserves the right to exercise either the replacement of the software or the refund of the license fee you paid for the software. ATF and its suppliers do not and cannot warrant the performance or results you may obtain by using the software.LICENCE AGREEMENT FOR FONT SOFTWAREBetween Australian Type Foundry Pty Ltd (Australian Type Foundry or the licensor) and the End User/Customer (you or the licensee).1. LICENCEThis Licence Agreement for Font Software (Licence Agreement) becomes a legally binding contract between the licensee and the licensor when you access Font Software supplied by electronic delivery methods or open packaging containing Font Software supplied on a storage medium that you have purchased from Australian Type Foundry. Please read all these licence conditions thoroughly and carefully before proceeding. Once you access the Font Software you agree to comply with and be bound by all the conditions contained in this Licence Agreement. If there is any condition in the Licence Agreement that you do not accept, please do not access, use or download the Font Software. Please contact Australian Type Foundry immediately.2. GRANT OF LICENSE AND USAGE RIGHTS2.1 In return for the license fee paid, you are granted a non-exclusive license to use or store the Font Software on a maximum of 5 computers (of any type), whether networked or not, at one location.2.2 If the Font Software is required for use on more than 5 computers or at different locations, this can be achieved by purchasing further copies of the Font Software or by applying to Australian Type Foundry for an appropriate Multi-User, Site, Country or World Wide License, please refer to point 3.2.3 The Font Software may not be used or installed on a server that can be accessed via the Internet or other external network system or by computers that are not part of the 5 user licensed unit.2.4 A copy of the Font Software should always be made for purely back-up purposes.2.5 Except for your right to use the Font Software in accordance with this Licence Agreement, all other rights, title and interest in the Font Software and related trade names and trademarks are owned and retained by Australian Type Foundry and/or its Suppliers.2.6 You agree to establish reasonable procedures to restrict access to and use of the Font Software, trade names and trademarks to comply with the conditions of this Licence Agreement.3. MULTI-USER LICENSES3.1 If you need to use or store the Font Software on more than 5 computers, you need to purchase an appropriate multi-user licence that can be tailored to suit your specific requirements.3.2 When determining the number of computers to be licensed, you must include all computers that might have access to or might store the Font Software at any point in time. The number must include concurrent and non concurrent use.3.3 If the Font Software is stored on a server that is attached to a Local Area Network (LAN) or a Wide Area Network (WAN), every computer that has access to that network must be included in the multi-user licence number to ensure that every computer is properly licensed.3.4 Common multi-user licences can take the form of: a number of licensed computers at a single site; a number of licensed computers at a number of specified sites; a number of licensed computers within a single country, that may be at a number of sites or a number of licensed computers that are licensed for use anywhere in the world.3.5 Please contact Australian Type Foundry if you think that a 5 computer licence is insufficient for your requirements. Australian Type Foundry can then calculate and propose a suitable tailored licence to meet your needs.4. FONT SOFTWARE4.1 The term Font Software relates to the digital font data supplied to you from Australian Type Foundry by electronic or other means. This digital data may include, but is not limited to, a single typeface weight/style, a typeface family, a font or typeface collection/library or any combination of these products.4.2 Font Software includes any updates, upgrades, expansions, modified versions, copies, format or other derivative of the original font data supplied to you from Australian Type Foundry.4.3 The Font Software and all modifications or derivatives of the Font Software shall remain, now and in the future, the exclusive property of Australian Type Foundry and/or its Suppliers.5. EMBEDDING RIGHTS5.1 Embedding of the Font Software into electronic documents, presentations, internet pages or other similar use is only permitted where the Font Software cannot be modified or extracted. You must ensure that where the Font Software is used in such applications that the Font Software is secure and cannot be used for editing purposes or extracted for the creation of new documents.5.2 If you want to create documents or files that permit embedded Font Software to be edited or modified in any way, a separate licence agreement is required that is subject to an additional charge. Please contact Australian Type Foundry for details.6. OTHER RESTRICTIONS6.1 You are not permitted to modify, adapt, translate, reverse engineer, decompile or disassemble the Font Software.6.2 You are not permitted to merge the Font Software with or into other software programs. However, this may be permissible in certain circumstances and would require a separate licence agreement that is subject to an additional charge. Please contact Australian Type Foundry for details.6.3 You are not permitted to use the Font Software, or any component of the Font Software, for or as a basis for your own software development or own Font Software development.6.4 You are not permitted to modify the trademark name, the font name, trade name, licence conditions, any identifying tags or any other part of the Font Software without the express permission of Australian Type Foundry.6.5 All modifications of the Font Software remain the exclusive property of Australian Type Foundry and/or its Suppliers.6.6 Any modifications that are not authorised by Australian Type Foundry in writing invalidate all warranties and support granted with this licence and are deemed to be a breach of this Licence Agreement.7. ASSIGNMENT7.1 You are not authorised to sublicence, sell, lease, rent or lend the Font Software to any third party.7.2 You may permanently transfer all of your rights to use the Font Software to a third party provided that: the third party agrees to be bound by and comply with this Licence Agreement; you transfer this License Agreement together with its associated documentation (if any) and the ori
Michael TensionAuthor
Michael TensionTrademark
Overspray is a trademark of Michael Tension.Copyright
Copyright (c) 2015 by Michael Tension. All rights reserved.Description
Copyright (c) 2015 by Michael Tension. All rights reserved.License
Tension Type End User License Agreement1. Agreement of Terms. The purchase, download and/or use of this software constitutes acceptance of the terms of this Agreement.2. Grant of License. Tension Type (Licenser) grants to the purchaser of this typeface package (Licensee), a perpetual Non-Exclusive License to use the contents, Tension Type font software, on up to five (5) CPUs. These CPUs can be connected to and the font software used with any number of output devices such as a laser or inkjet printer, imagesetter or film recorder. However the font software may only be downloaded to the permanent memory (eg: hard drive) of one output device. The licensee may also make one (1) archival (back-up) copy to a removable disk. Any additional licenses needed must be purchased separately. Tension Type does not require your service bureau to own the font for output only, however prior agreement must be established between the service bureau and the licensee that all Tension Type font software will be removed from the service bureaus systems and destroyed when output is complete. Tension Type reserves all rights not expressly granted to the Licensee in this Agreement.3. Copyright. The software contained in this package is owned by Tension Type and is protected by the Canadian copyright laws and international treaty provisions. Therefore, Licensee must treat the software like any other copyrighted material such as a book or musical recording. Licensee may not copy this software with the intent of renaming, reselling or distributing it as shareware or freeware. Unauthorized copying of font software deprives font developers and designers of their just compensation. Unauthorized duplication of fonts is not only unethical its also illegal.4. Transfer of Rights. The Licensee may NOT transfer any rights granted in this agreement to any third party.5. Limit of Liability. Tension Type will not be liable to Licensee or any other user of this software for any damages caused by licensees use of this software including but not limited to loss of profits, lost savings or damage to files and equipment from using this software in a manner other than which it was intended. Copyright 2015 Tension Typewww.tensiontype.com
Opirus Semi-Serif Regular
Opirus Semi-SerifStyle
FontStruct is a trademark of FSI FontShop International GmbHCopyright
Copyright opipik 2013Opirus Semi-Serif is based on Formal Roman by caliopigio (http://fontstruct.com/fontstructors/caliopigio)Description
Opirus Semi-Serif was built with FontStructOpirus Semi-Serif is based on Formal Roman by caliopigio (http://fontstruct.com/fontstructors/caliopigio)License
Creative Commons Attribution Share Alike
1.00 March 23, 2006, initial releaseAuthor
Michael FischerCopyright
Typeface (your company). 2006. All Rights ReservedDescription
This font was created using Font Creator 5.0 from High-Logic.com
SF Intellivised Outline V2 V2
SF Intellivised OutlineStyle
Derek VogelpohlTrademark
SF Intellivised Outline is a trademark of ShyFoundry.Copyright
Copyright (c) 2008 by ShyFoundry. All rights reserved. Freeware for personal use only. To purchase a commercial license, please visit our site at http://www.shyfoundry.com.Description
For additional information about the usage of this font, please read the included ShyFoundry Freeware EULA or visit our site at http://www.shyfoundry.com/licensing.License
For additional information about the usage of this font, please read the included ShyFoundry Freeware EULA or visit our site at http://www.shyfoundry.com/licensing.
Janda Scrapgirl Dots V2
Janda Scrapgirl DotsStyle
1.002 2012Company
Kimberly GesweinAuthor
Kimberly GesweinCopyright
Copyright (c) 2012 by Kimberly Geswein. All rights reserved.Description
Copyright (c) 2012 by Kimberly Geswein. All rights reserved.License
a_Technics3D DemiBold
Style : DemiBoldPackages
1998; 1.2Author
W.Chufarofsky & M.SlutskerTrademark
a_Technics3D is a trademark of the Arsenal Company.Copyright
Copyright (c) Arsenal Company, 1998. All rights reserved.Description
*Arsenal Company 1998* FAX: (095)974-7991; e-Mail: firstname.lastname@example.com; Phone: (095)974-7989; WEBpage: www.ars.ru (Design and Featuring W.Chufarofsky & M.Slutsker)


text:
machinery capital investment - Search Results
Articles About machinery capital investment
Articles are sorted by RELEVANCE. Sort by Date.
1 Reinvesting in New Equipment Pays Dividends (November/December 2007)
Recently, I was approached by a colleague who is a manufacturer outside the gear industry...
2 The Competitive Edge (November/December 1986)
Now that the new tax bill has been passed, the time has come to begin evaluating how it will affect investment strategies in the machine tool business. Your first reaction may be to think that any motivation to invest in capital improvements in your company is gone, because both the investment tax credit and the accelerated depreciation on capital investment have been removed from the tax law. After all, if Uncle Sam is not going to help us out through some short term tax gains, why should we bother? Can we afford to bother?
3 IMTS 2014 Product Preview (August 2014)
An in-depth look at the major booths with the latest technology used in gear manufacturing.
4 Industry News (January/February 2016)
Latest new from the Gear Industry
5 GT Extras (January/February 2014)
Video from C&B Machinery; Introducing the Gear Technology Blog, featuring technical editor Charles D. Schultz; plus an online-exclusive article on big gear inspection.
6 Thermal Behavior of a High-Speed Gear Unit (January/February 2016)
In this paper a thermal network model is developed to simulate the thermal behavior of a high-speed, one-stage gear unit which is jet-lubricated.
7 Industry News (October 2012)
The complete Industry News section from the October 2012 issue of Gear Technology.
8 Crossroads and Transitions - Part II (July 2009)
The auction has been held. The warehouse is bare. The computers and furniture are being packed, and Cadillac Machinery, the company started by my father in 1950, and of which I was president for more than 25 years, is close to being no more.
9 ...And from the Industry (October/November 1984)
Industry News from October/November 1984 Gear Technology.
10 Grinding Bevel Gears on Cylindrical Gear Grinding Machines (January/February 1994)
Power train designs which employ gears with cone angles of approximately 2 degrees to 5 degrees have become quite common. It is difficult, if not impossible, to grind these gears on conventional bevel gear grinding machines. Cylindrical gear grinding machines are better suited for this task. This article will provide an overview of this option and briefly introduce four grinding variation possibilities.
11 Back in the Good Old Days (September/October 1998)
Come with us now to those thrilling days of yesteryear...Ok, this is not the Cisco Kid, but we do have a little game for you. Guess the year the following advertisements and excerpt were printed - they all appeared in a dingle issue of Machinery Magazine.
12 Industry News (November/December 2013)
The complete Industry News section from the November/December 2013 issue of Gear Technology.


text:
Ohio State EcoCAR 3 Team at G.I.R.L. 2017 ConferenceThe Ohio State EcoCAR 3 team recently partnered with the U.S. Department of Energy to bring fun, STEM-based experiences to young girls at the national G.I.R.L. Conference in Columbus, Ohio. The theme of the booth was "STEM, Rising". You can read more... | LEARN MORE
Ohio State Wins EcoCAR 3 Year ThreeThe Ohio State University's EcoCAR 3 team won its third consecutive EcoCAR 3–Advanced Vehicle Technology Competition on May 24. EcoCAR 3 is a four-year collegiate automotive engineering competition that challenges 16 universities across North America... | LEARN MORE
Give to OSU EcoCAR 3By donating to EcoCAR 3 you are supporting the development and operations of a student built, hybrid-electric powered vehicle. Your financial gift will help students of all majors gain valuable, hands-on, real-world experience with automotive engineering... | LEARN MORE
Ohio State wins EcoCAR 3 Year TwoThe Ohio State University team was crowned the Year Two winner of the EcoCAR 3 – Advanced Vehicle Technology Competition. The four-year collegiate engineering competition challenges 16 North American university teams to redesign a 2016 Chevrolet... | LEARN MORE
GM Presents Seed Money to Returning Ohio State EcoCAR TeamOn November 13, Ohio State EcoCAR's General Motors mentor, Lance Smith, presented the team with a seed money check for $20,000. The seed money was given to the team for returning to the EcoCAR program. The check was presented at the team's... | LEARN MORE
Ohio State Hosts Workshop on Advanced Vehicle Technology CompetitionCOLUMBUS, Ohio – EcoCAR 3 will host the Fall Workshop October 21 – 24 at The Ohio State University, involving industry leaders from General Motors and Argonne Laboratories, as well as 16 teams from universities across North America. Over the four... | LEARN MORE
Ohio State Wins EcoCAR 3 Year OneSEATTLE, Washington – EcoCAR 3, a four-year student competition to reengineer a 2016 Chevrolet Camaro into a performance hybrid, concluded Year One with an award ceremony on June 4th following five days of presentations. Year One Competition took... | LEARN MORE
EcoCAR and Chevrolet partner for NASCAR Sprint CupHybrids are the new thing – even at the racetrack! The winning EcoCAR 2: Plugging In to the Future competition vehicle from Ohio State University was on display just this past weekend with Chevrolet at the Kansas Speedway for the 2014 NASCAR Sprint Cup . | LEARN MORE


text: ^^There you go. I live in a very conservative gun-hugging, Bible-toting part of the Pacific Northwest. I have a co-worker who is athiest. If he gets into a conversation with someone over religion or other issues he doesn't believe in- I'm not going to jump in and yell "YOU'RE WRONG!!!" Especially if said co-worker was my boss. Wrong as though I feel he may be, so long as he doesn't offend, it is not my place to put him down. Chewie's relationship with Han is extremely deep. Even the look he throws at Han when they're packing up reward on Yavin gets a firm reprimand, he certainly won't cry foul on board ship in front of others.


text:
GraphicRiver Christmas Wreath with House 9700861
Category: Stock Vector | Comment: ( 0 )
GraphicRiver Christmas Wreath with House 9700861
Stock Vector \ Conceptual \ Seasons \ Holidays \ Christmas Christmas Wreath with House
Christmas \ Decoration \ Snowflake \ Santa \ Ribbon \ Year \ Noel \ Ornament \ Spruce
Stock Vector - Christmas Wreath with House 9700861 by dashadima @ GraphicRiver
Stock Vector \ Conceptual \ Seasons \ Holidays \ Christmas Christmas Wreath with House
Layered: No; Graphics Files Included: JPG Image, Vector EPS, AI Illustrator; Minimum Adobe CS Version: CS.
Folder include EPS10, Ai and JPG files. EPS10, Ai files can edit in Adobe Illustrator CS5, CS5.5, CS6 and CS. 100% Vector. Vector Christmas Wreath with House isolated on white background. Gradients and blends used.
Christmas Decoration with Card; Vector Christmas Background with Beads; Fir Frame with Decorations; Vector Colored Shipping Line Icons; Vector Colored Internet Line Icons; Vector Colored Communication Line Icons; Vector Colored Auto Line Icons;
Keywords: angel, background, bow, catholic, celebration, christmas, christmas decoration, circle, congratulation, december, decoration, fir, gift, greeting, icon, indoors, merry christmas, new year, noel, ornament, ribbon, santa, snowflake, spruce, surprise, tree, vector, winter, wreath, xmas.


text:
My Trackers
my Nutrition
my Fitness
my Weight
Other Goals
my SparkPoints
Community Home
Community Feed
Message Boards
Challenge Central
Member Blogs
What's New
Health & Wellness
Weight Loss
Stuff We Love
Healthy Family
Pregnancy & Postpartum
Instant Inspiration
Food Database
Lifestyle Centers
The SparkPeople Blog
Calendar Challenges
Stream hundreds of free workout videos and track them in one click. Get fit at home, at work or wherever you are!
Today's Featured Video:
Ageless: Interval Training
Visit SparkPeople.TV
Access hundreds of thousands of recipes that are healthy and easy to make. Get full nutrition info for every recipe and track with one click!
Today's Featured Recipe:
Not-Fried Shrimp with Japanese Cocktail Sauce
Visit SparkRecipes.com
Secrets of Success
How to grieve.
Friday, February 12, 2010
My uncle passed away this week. He was 52. He has two little kids and a wife. He was sick for the last few years, had been battling brain tumors. His oldest son, on that night, said "i'm happy for my dad." such wisdom for such a young person.
Everyone has been grieving and preparing for so long. He went in to Hospice in late December. By now it seems like they are all relieved, ready to move forward. When my mom called me to tell me the news, she said (later in the conversation), 'well, i think it's about time to take down the kids table from Thanksgiving. In fact, i think it's about time we have Christmas.'
I didn't take the time to visit, to deal with it all, while he was sick. I saw him twice. So i have to deal with it all now. It effing sucks. It just breaks my heart to imagine losing a parent, to imagine what my aunt and my cousins are going through. But i feel pretty good about the way i'm dealing. The old me would have bottled up my feelings, hid in bed all week. But instead, i went to work, even though i cried in the stairwell. I went to the gym, i am cooking healthier versions of my Yiayia's recipes, to bring to the family gathering on Saturday. I have found, actually, that cooking and feeding others is very cathartic.
I'm not sure how the family togetherness will go. I try not to associate myself with some of the relatives on that side. I guess i'll just have to be polite and keep a distance, and keep in mind (despite what they'll probably think,) Saturday is not about them.
Share This Post With Others
Report Inappropriate Blog
Member Comments About This Blog Post
Report Inappropriate Comment
My SparkPage
So sorry for your loss.
I hope you can all manage to just be there to love one another. What a good idea to gather.... but, then, I'm Irish. We do lonnnng wakes, of rousing stories and sharing laughter and tears and songs. I'm lucky that way.
Do take time to be alone and to breathe into the grief. Do take time to let yourself drop into the sadness.
It comes and goes. Comes and goes. Like life and breath.
(I just lost my brother in December- and I still get caught by surprise that I'll never yell at him, laugh with him, play pool with him again...)
2896 days ago
Report Inappropriate Comment
My SparkPage
My deepest sympathies to your and your family. Crying is good for you. I wish you peace on Saturday as you gather with your family to honor, remember and grieve your uncle.
2897 days ago
Report Inappropriate Comment
My SparkPage
Sorry to hear about your loss and expressing your thoughts here is a perfect way to think out your feelings. Grief is never easy and there is no wrong or right way to do it. You have to do what works for you. Good luck with things this Saturday.
2897 days ago
Add Your Comment to the Blog Post
Log in to post a comment
Disclaimer: Weight loss results will vary from person to person. No individual result should be seen as a typical result of following the SparkPeople program.
Get An Email Alert Each Time
MMMLEAFYGREENS Posts
See Today's Featured Member Blog Posts
More Blogs by MMMLEAFYGREENS
- 5/29/2011
nutritionist, leafy greens, plans.
- 7/8/2010
A haircut and a happy day
- 6/21/2010
Viva Futbol!
- 6/13/2010
View All ›
close ×


text:
There is nothing hotter than seeing a sexy chick in plain white cotton panties and PORN. Watch Youjizz brutal teen fuck porn on free mobile sex tube for iPhone, iPad, Android, Samsung Tablet. XVIDEOS Busty hottie Lily Love gets a sticky facial after having an erotic sex free. Sexy Panty Porn - Bikini XXX Private Videos - Naked Beach Girls. XVIDEOS Gay boys giving head videos Ryan is the kind of fellow no crazy free.
Probably only a girl in lingerie that has also a nice dick between her sexy legs. If you feel Panties Hairy Porn Tube enough to taste real carnal pleasure, go to free sex tubes! Xvideos, Panties XXX Movies, Sex Tube Clips.
Watch Super Horny Japanese Babes In Extreme Hardcore Porn JAV 5 By WeirdJP 4 Preview. Nylon Panties Lingerie Free Sex is the adult portal that will never disappoint you.
Xxx Sexy Teen Spy Sex Tube Fuck is a new word in the world of high-quality free Xxx Sexy Teen Spy porn. HD uncensored panties xxx video clips and Best uncensored panties HQ porno movies.


text:
Archive for February, 2009
The First Mileage Run of the Year
Feb 12th
Posted by HappyFlier in Mileage Run
It's time to start earning miles! I need 50,000 Elite Qualifying Miles (EQMs), or as I like to call them, Butt in Seat Miles, by December 31 to maintain my Platinum Status, and also earn enough miles to pay for our next great vacation. I'll get the year off to a nice start when my wife and I travel to Ireland on vacation; I'll earn 9,300 EQMs for that trip (Austin to Chicago to Dublin and back), but I need to build on that.
Trips to Seattle and Portland were not an option. Although the prices on both have dropped since my previous post, neither of them were an attractive mileage run. I visited the Mileage Run Forum on Flyer Talk and saw that some of the American Airlines mileage runners were doing weekend trips to Dublin and Frankfurt, Germany. Those are expensive trips, more than I would generally like to pay for a trip, but you earn so many miles that it can be worth it. Last year I did a hop to Frankfurt and achieved my lowest cost per mile ever: 1.74 cpm, including my Platinum bonus). I'd love to get another flight like that, but flights under 3 cpm from Austin have been tough to find.
I looked at the Frankfurt and Dublin trips and even found one I liked: Austin to Dallas to Atlanta to Chicago to Dublin to Chicago to Los Angeles to Austin. The cpm on that was less than 2.25, but I passed on it. The layover in Chicago on the way back was only an hour and twenty-five minutes, not enough time, in my opinion. to clear customs, change terminals, and get to the gate on time. I saw another one I liked, similar to the one above but without the Los Angeles route but did not jump on it fast enough and the price rose by over $200 by the time I was ready to buy it the next day. (Yes, American does allow you to put an itinerary on hold, but that only holds the schedule, it does not hold the fare. I put an itinerary on hold last year and when I tried to purchase it the next morning, the fare had doubled!)
The overseas trips were not working out for me, so I looked at some domestic routes. Some of the mileage runners at Flyer Talk found a great deal on American for round trips between Boston and Seattle. I had done that a few years ago (Austin to Dallas to New York LaGuardia to Boston to St. Louis to Seattle to Dallas to Austin) and got a really good price on it, but couldn't get it to work for me this time.
Eventually, I did find a transcon MR that would work for me and booked it: Austin to Dallas to Boston to Los Angeles back to Boston to Dallas to Austin. The transcon flights are both non-stop, those are getting harder to find. I'll leave Austin at 8 a.m. on Saturday and return 7 p.m. Sunday. I'll earn 9,346 EQMs, 18,692 total miles, at a cost per mile of 2.56. That is a bit more per mile than I have paid in the past, but from what others are saying, it is a good rate at this time of fare hikes and service reductions.
I'm doing the trip in early March on what may be one of the last non-stop flights between Boston and Los Angeles. I looked at the same trip for the following weekend and the transcons were gone, making it necessary to stop in Chicago while going each way. And the price went up by more than $300, making that a terrible mileage run.
Between this MR and our Ireland vacation, I'll have over 18,000 EQMs in my account by the middle of March. That is a good start, but as fares rise during the summer vacation season, it may be difficult to maintain that pace for the rest of the year. Wish me luck!


text:
.sbh file extension
- .sbh
- Rational robot library header file.
For each .sbh file there will be an accompanying .sbl file providing the library definitions for the functions and procedures contained in the header file.
Can you add to this? Do you know of any applications not already listed which will work with .sbh files, view .sbh files or open .sbh files? Are you able to contribute any additional reference information or file format information about .sbh files or have you spotted any errors or omissions? If so please let us know by emailing us at firstname.lastname@example.com - Thank you.


text:
Clean license conditions
From Clean
Revision as of 08:50, 6 July 2010 by Bas Lijnse (Talk | contribs)
Clean and its standard libraries are available under two different Licenses:
- The LGPL, the standard GNU Lesser General Open Source license, which is free of charge.
- A commercial license that can be obtained from Prof.dr.ir. M.J. Plasmeijer, preferably via email: email@example.com.
Note, that development under the LGPL license entails some restrictions and responsibilities. More information on the nature of the LGPL is available at http://www.gnu.org/ and http://www.opensource.org .
A commercial license has the advantage that one is not obligated to make source code available. It furthermore gives right to technical support and is highly appreciated as a sign that you appreciate our work.
Users can choose under which license they wish to operate under.
December 12, 2002.