What is the real Cost of Software Complexity?

Recently, I had an interest about the runtime cost of complexity. I am used to situation where people argued they used a bad or poor design, especially in embedded systems, where resources are expensive and thus, scare. For example, why would you cut your programs in different modules when you can have a bunch of functions calling each other? Why using parameters when you can use global variables?

But such design flaws have concrete impacts (poor maintainability, or analysis support) and using it come at a cost: more testing (obviously) but also increases certification costs (more tests to write) and reduce potential components reuse.

While this is difficult to quantify these costs, this is easy to evaluate the resources consumption of well designed software. For example, how much does it costs to avoid the use of a global variable. Captain obvious will tell you that the cost is not significant for memory but there are other costs (processor cycles, context switches, etc.).

So I started to compare the same program implemented using two patterns. The program is a simple producer-consumer system with one component sending a value to another component. There are the difference between both implementations:

  1. Shared Variable: The producer and consumer are in different tasks and use a global variable to exchange the value
  2. Isolated Tasks: The producer and consumer are located in different tasks and communicate the value using communication queues

I specified these two implementations in an AADL model, generated the code (with Ocarina) and gather some metrics (with the Linux perf framework). I got the number of context switches for each implementation: using shared variables uses more context switches. As there are the same number of tasks in both implementations, I was thinking I would get a similar value. But not at all.

Producer Consumer: difference of context switches

(x = number of shared variable/data flow ; y = number of context switches)


This value is confirmed with the number of instructions for each implementations as well: the shared variable takes then way more instructions than the implementation with data flow.

Variation of Processor Cycles

(x = number of shared variables/data flow in the indices ; y = number of instructions)


Still very surprised by this result. I also want to make a comparison on the memory performances. But now, looking at this preliminary results, it sounds very weird and build an argument to avoid bad design (such as using global variable vs. encapsulated data with clear and clean interfaces). I will probably provide more details but these first results are motivating to investigate further with different code patterns and variations.

Burning River 100 Race Report (a.k.a how to run 30 hours with diarrhea)

Disclaimer: this post is long. Very long. It explains my epic Burning River 100 story, including why I signed up, how I trained and how the race was. So, if you want to read the whole thing, it might take some time.

This is where it started: in the dark and early

This is where it started: in the dark and early

How it started

It all started in November, while running the Bucky challenge. The night before the marathon, I found out that the registration for Burning River just opened and they had a 50 miles option. At that time, I only ran a 50K and few marathons. I had a 50 milers on the list (JFK) but did not even started it. That night, I had a beer called “Burning River” (from Great Lakes) and assumed this was a sign to register. I then signed up for a 50 miles race even before finishing one. I was excited. At that time, I think 50 milers was more than enough and did not even think running 100 milers.

It was supposed to be a great week-end: we will take a room at the finish line with my girlfriend and friends can come and support or just party! Everything was done to be a great week end and celebrate the joy of running.

Since then, things changed: I finished JFK 50 milers in a pretty good shape. After a few weeks, I got injured, which forced me to rest for a while. In the meantime, drama happened, I was single again, did not really want to run the 50 miles course and be involved voluntary in awkward situations. We were then in May and I was really considering to cancel my registration.

Looking then at my training log, my recent races and thought I might be physically ready to run a 100 milers. As the 100 miles and 50 miles races start at different time and finish at different place, I will avoid any awkwardness or stress. This would even be a better strategy to avoid any uncomfortable situation and double the miles. This started to be exciting again. I double checked the feasibility of running a 100 milers: first with the race director (switching from 50 to 100 was possible) and with previous runners. It sounds that my training was more than enough. As soon as I got the green light from the race director, I signed up.

I was then registered for Burning River 100 milers. And it will be awesome.

Training in 2014

Monthly mileage in 2014

The Training

During 2014, I was already running to work and was logging (in average) 60 to 100 miles per week. I then got injured in January and was then forced to take some rest to recover. I started to run again very slowly in February and ran a marathon in March. It did not feel great but at least, was able to finish it. Then, I completed a 50K in March and ran Pittsburgh with a good time while being highly dehydrated. At that time, the injury was just an old story, which was confirmed the next month by running Laurel Highland 50K and finishing strong in a very good shape in 6:15. From April to June, I ran from 60 to 90 miles a week and finish with 20+ miles long runs and/or back to back long runs without feeling any soreness.
Also, as I prepared for Laurel Highland 50K, I started to eat hills for breakfast and dinner every day. It was hard in the beginning: my heart was quickly racing but after a while, these hills were no longer a problem. It also increased my time on roads, this is how I finished Pittsburgh Marathon in 3:31 (PR at that time). I was then getting stronger and faster.Finally, it was time to adapt to the particular conditions of a 100 milers by:

  • Running at night: I ran during the night with some friends to test the gear I wanted to use at night and make sure it will be ok for me.
  • Running while hungry: I forced myself to be hungry during some runs. I was then very angry with other people, so, I tried to do that when I will not have any social interaction (e.g. not when running to work).
  • Running when being tired and sleep deprived: I traveled to Spain one month before the race and forced not to sleep a lot when flying and run right after. This taught me how my body reacted and what I could expect.
Training from March to June

Weekly mileage from March 2015 to June 2015

From a training perspective, everything seemed to be ready. I had to finalize the race preparation, especially in terms of nutrition and organization (drop bags, pacer, etc.).

Nutrition Plan

JFK 50 milers and Forget the PR were two disasters where I lost almost 1 hours due to a bad nutrition plan. It was time for change and started to see what feel good. After trying different recipes, I found that I had less stomach pain when eating vegetarian. In addition, I stopped drinking alcohol for a while to see the effect it had on my body. Surprisingly, the pain I experienced before was no longer there. Then, I decided to follow this no-alcohol policy until race day at least to make sure no such detail could ruin my race.

Finally, I found an answer to the usual question of “what to eat before the race”. While I do not believe in carb-loading, this is important to have a nutritious meal before the race. Something that gives you the energy you will need during race day. After trying different things, I turns out that eating a low-GI food with any form of fat/protein was working. I baked my own bread and took peanut butter and banana (or chocolate chips) on top of it.

I tried this strategy for Laurel Highlands 50K and seemed to work well. I also tried the nutrition during the race and stick with very basic stuff, mostly watermelon, banana, salt, some trail mix and/or M&M’s. Forget the peanut butter and chocolate balls and other grilled cheese sandwich. Do what you are supposed to do: run a race, not eat like a pig. This is a trail race, not a Denny’s dinner.

The nutrition plan was all set then.Drop Bags

There are drop bags available and you have 7 opportunities to get your bags. I carefully packed drop bags that had:

  • socks – having dry socks is always great and avoid blisters. I did not use all of them and paid the price at the finish
  • sunscreen: especially during the day. it was useless considering that the race had sunscreen at the aid station
  • bug spray: the aid station also has it – useless for this race
  • hair band
  • batteries: for the headlamp as well as backup flashlight (only when running at night, I packed these items for the drop bag at the aid station after mile 60)
  • toilet paper: very useful in the conditions I started this race (see below)

In some bags, I put shoes in case I need to change. The goal was to be able to be self-sufficient over the whole race. Even if I had a pacer and potential support, I did not know what will happen to them (they might have something coming up that day). So, I packed everything with the idea that I will have to be alone for the whole thing.

Getting Sick

In my training plan, I included a run at night with friends. On this day, my whole GI track started to be really weird and I had issues for a week (nausea, sensation of fainting, etc.). It improved day after day and was thinking everything was on track for race day. Unfortunately, two days before the race, I went to a restaurant for a lunch with a customer. I do not know why (and if I will ever know) but after this meal, I was totally sick and did not recover until race day. I felt nauseous, food did not stick and was loosing a lot of water. Also, I lost my appetite and eat very little, which is not what I am used to. My energy was draining quickly because of it but I was also not refueling properly.

For sure, I could have DNS (Did Not Start) and stay home and complains or going to the doctor, which will give me probably potential useless medication. But this is not what I am. I am a guy that enjoys the outdoor, that loves to try new things and go for adventures. Even if my body hurt, if I had pain, it did not cost anything to give a try: at worst, I drop – at best, I finished.

So, I put my ass into the shuttle and pray that I will not puke during the trip to the starting line.

The Race

The race is a point to point and organizers offer shuttle from the finish to the start. You have to get up early (buses leave at 2:15) but this is very convenient. There are aid stations every 5 miles so that you do not have to pack so much stuff – just refill your water bottles and take snacks. The 100 milers solo starts at 4am.

For the first 11 miles, you are on the roads. When starting, I was surprised to see many guys running very fast. I thought I was too slow but figured that I just had to run my own race. During these first 11 miles, I started to have pain, which stopped me several times during the race. After the first five miles, I already stopped so many times that I changed immediately my objectives from running under 20 hours to just finishing. The pain was getting intense and the faster I run the more intense the pain was. At that time, all I wanted was to be done with this road section and go in the trails: I am slower in the trails, which reduces the pain. When making it to aid station at mile 11, I see James and Paul, two great runner from Steel City Road Runners. They asked me if I was feeling ok, I just replied “not really”. I was just in pain and tried to go out of this aid station. And no longer feels the pain.

From mile 11 to mile 31, the situation continued to be worst. The heat started to impact me. I was loosing of energy and water because of the pain and by just sweating. I stopped several times. Tried to run. The mile 31 Aid-Station (Alexander) was definitively helpful – the ladies here had sponges in a big ice bucket – a great way to refresh. Unfortunately, no food was able to stick and everything made me sick. I tried to take something small when I can but try not to take too much to avoid to aggravate the situation.

Over the next 20 miles, my only idea was to be able to make it to mile 53, the Stanford House, where my pacer was waiting for me. The idea of eating anything was disgusting and had a hard time to even drink. The heat was at the maximum then and I started to feel really bad. During this run, I met some folks. I remembered a 60+ years old dude (Raymond) running the 100 milers. He is a strong runner (3:30 marathon time) and seemed in a very good shape (at least, better than me!). We passed each other several times. I also remembered a nice girl from Cranberry (a physical trainer) that was doing her first 100 miler. We also passed each other several times. Before reaching the Stanford House aid station (mile 53), there are a lot of steps that literally killed me. I was then mentally and physically exhausted. I made it to the half-way point, the Stanford House. I did not want to continue.

The race rules said that if you make it to the Stanford House and drop, you can still get a medal. After all, it could be a nice way to finish: just run 50 miles, get your medals, stuff your stomach with pizza and other junk food and get the fuck out. But Erica (my pacer) and Ali (her girlfriend) were there and came down to help me. And it would be rude to drop: in that case, it would have been useless for them to come. And also, dropping like this is not what I am: I was there to do the 100, not the 50 and when you commit to do something, you finish it, unless there was a good reason for not doing it. And the reasons I wanted to drop were not good reasons. I was low on energy but there was still some fuel in the tank. Probably not enough to keep going until mile 100 but still some: why not trying to see where we can go? But at that time, I did not yet know that these girls will make me finish this race.

Erica and I started to run from mile 53 to the next aid station. Quickly, the pain forced me to stop a few of times (actually, one mile after we left). I was feeling outside of my comfort zone but not in a good way: in was really painful and uncomfortable. The type of pain you do not want to ever experience. Erica quickly noticed it and took actions right away. She called Ali and asked her to bring chips and drinks to the next aid station. When we reached the next aid station (Pine Lane), Ali was there, waiting for us with the supplies Erica asked for. Erica forced me to drink several cups (around 6, I guess) of water and eat chips and salt tablets. We met Garrett, a friend of ours that was running the course. He seemed strong, standing and ready to continue. This made me feel bad: I was there, laying down, very dehydrated and out of energy. I was seeing him finish and was not sure about myself. After a few minutes, it was time to stop daydreaming.

So, we took off.

I was feeling a little bit better but not so great. We started to walk. A lot. And talk. A lot. About everything, from politics to private life. I loved it. It helped me to go through the pain for a while. We also stopped on a bench to take a break. At that time, I did not know if we were taking our time because we will drop soon or if it was just temporary. Unfortunately, soon the pain stopped me again. Erica explained my pain to somebody in a parking lot. The dude told us he usually takes a medication when running to avoid stomach aches and diarrhea for 12 hours. He had one tablet left in his car and gave it to me. I took it right away: if it works, it would then avoid any energy and water loss due to the pain I had. We took off. During that leg, running was still painful and, as time went on, I was feeling very weak. It started to be dark and the feeling of being nauseous increased over and over. Erica reminded me to drink every 10 minutes. Until the finish, she will remind me to drink all my water between aid station. And she will make sure I take at least 3 cups of water before the next aid station. It made a lot of difference.

Then, we reached the Ledges aid station. Mile 65. At that point, I did 100K. Longest. Run. Ever.

I was done, exhausted, tired and my only wish was to go back home and stay in bed. Ali (best crew ever!) was there, she put a blanket so that I can lay down and rest for a while without having bug bites. Erica brought me three cups of water and chips. I did not even think about running again. I no longer wanted to be part of it. Then, I took a nap. Just sleeping for some time. After all, if I am no longer doing this, who cares? After some minutes, I woke up and was feeling great again. I wanted to do this, to finish it. The medication I took about a hour ago seemed to work, so it was time to refuel: I took some potato soup (awesome job from the Aid Station!), Pizza and Chips.

It was time to rock it.

“I run like my grandpa walks” – Ledge Aid Station. Thanks to Erica, after this, everything becomes magical

Going to the next aid stations was not easy but there was improvement: I did not have to stop as much as before and I was feeling better overall. Erica continues to tell me to take water, a lot of water. Between each leg, she forced me to take at least 16 ounces. Then, we made it to pine Hollow 1 (mile 71). When I got there, Kristen, a good friend, was waiting for us with food! I was not expecting this at all and it was definitively a great surprise. She stayed at this aid station and even later until mile 90. Having friends around definitively gives you extra energy.

We did the loop around the aid station and continue the course. Then, we made it to Covered Bridge I (mile 80). At that point, it was no question to drop: the investment was so big at that point that I was no longer thinking about it. We had to make it. I had a bad moment and took a cheese sandwich to refuel. I lay down for a while. Erica was throwing up. The aid stations volunteers came to me to check if I was feeling ok. They asked me: “what are you doing? are you ok?”. I just say that I was fine and I will continue with Erica. They just asked me: “where is Erica?” and Ali told them: “she is throwing up”. They just said that it sounded bad. But who cares? We had fun and all what mattered at that time was to finish.

When we made it to Covered Bridge II (mile 85.7), we were tired but knew we could make it. I was debating if I could take a short break but the volunteer told me:“you might regret the two minutes break later”. This motivates me to stand up and run. We have 80 minutes to run 5 miles, mostly on roads. The something unexpected happened: the medication I took before (around mile 60) stopped to work (yes, it works for only 12 hours max). The pain was back and I had to stop again. I started to increase the pace then and we then made it to mile 90.

At mile 90, the cut offs until the finish were really generous. You can almost walk the whole thing to the finish. The strategy was to run not too fast to avoid any pain that will top me. We continue and reached the last aid station (mile 95). The last five miles are pancake flat and have just two hills and 30 steps to climb. The rest is mostly road. We walked most of it. Then, a lady came to us and told us the finish was two miles away. With only 40 minutes before the cut off, it was definitively time to run. And fast.

Erica motivated me, she continued and congratulated me all the time, encouraging me to keep going to the finish. I then started to run a slow pace (about 10 min/mile) and a faster pace (9 min/mile) until the finish. We crossed the finish line when the clock was around 29 hours and 54 minutes. At the finish, Garrett was there and gave me a high five, I just loved it and appreciated a lot that somebody I considered as a good runner waited for me, this was totally unexpected.

After crossing the finish line, I took Erica in my arms. I never, never expected she would be able to transform the zombie I was more than 16 hours ago into somebody able to finish this race. She was the right person at the right time. This was so unexpected. I am grateful to have her and Ali on this journey and I am glad and proud not only to complete the race but have done it with these girls. Kim, one of the person that inspired me to run long distances two years go, was there as well and congratulate me. It was also unexpected and I was honored by seeing her.

After crossing the finish, I investigated the damages. I got huge blisters on my feet, my muscles were really sore, walking was already very painful.Not a big deal, this will be temporary. After a shower, I laid down on my bed. The next sound I heard was the alarm clock.

Euphoric finishing with Erica - always happy

Euphoric finishing with Erica – always happy

Lessons learned

About Running a 100 milers

  • If you feel really tired, exhausted and do not feel you can make it to the finish: try to spare 10 minutes (e.g. it does not jeopardize your finish time by not making a cut-off) and take a nap. Re-evaluate the situation after until the cutoff (unless you have a huge issue)
  • Hydrate, hydrate, hydrate. Drink. A. Lot.
  • Embrace the down time. There will be time you think this is beyond what you can do, when you just want to drop. It will be temporary. Again, this will be a very long race, this times will pass
  • You might have some hallucinations, hear voices or see things that do not exist during your runs. This will pass as well.
  • Eat and try to get your calories in. Soup is a great way to refuel because you get salt and hydrate.
  • Do not go out too fast/quick. You have all the time to figure things out. This will be a very long day and you have a lot of miles to run – take your time. As detailed later, run your own race.
  • If you do not mind losing a couple of minutes at an aid station: change socks and shoes often. This would then avoid blisters and pain after the race (from personal experience)
  • Use bug spray at ***each*** aid station, otherwise, you pay the cost the next day
  • Run your own race: it does not matter if you are slow/fast, if you take your time at the aid station or if this guy looks great or not. What matters is to cross the finish line. Keep this ass moving and get out the aid station before the cut off and you will be fine. Do not make any assumption about anybody (including yourself): what matter is to cross the finish line.

About Running while being sick

  • Pack toilet paper with ziploc in ALL your drop bags (no exception)
  • Keep at least ONE ziploc with toilet paper in a pocket you can reach, not in your bagpack (you will thank me later)
  • Keep eating – you need the calories – even if your body does not process everything, you need some calories in so try to give it the opportunity to process some
  • Keep drinking – you need to hydrate – otherwise, you put your body at extreme risk: renal failure, rhabdomyolosis and kidney failure
  • Put medication into your drop bags and potentially your bagpack
  • Take salt – if food does not stick and you cannot eat something with salt, the salt tablets will still work

About Burning River 100

    • Be prepared before the Stanford House (about mid-way). You will have to climb a set of stairs. This is going to slow you down.
    • Be careful about the loops – the race includes three loops – do not miss them
    • The Aid stations have sunscreen and bug spray – no need to pack it in your drop bag
    • The probability to get lost is very small
    • The aid stations are well stocked and unless you have a special condition/expectation, you will find anything you need

Volunteers are awesome!The race organizers are very friendly and accommodating

And now?

Not sure what are the next steps. I am planning to take a break from running for a while. I am still registered for some races but will not sign up for something for the next couple of months. I will still run Tussey Mountainback 50 milers in October and will figure things out after. Do not misunderstand me, I will still run to stay active and healthy (e.g. run to work almost every day) but will not train as hard as I did during the past months. It is time to recover physically and mentally and focus on other things, such as sleeping, programming, working or getting a real social life.

Finish Strong and before the cut off

Finish Strong and before the cut off

Special Thanks

There are some people that are part of the full process of thinking doing a 100 miles, preparing for it and finally doing it. My first thoughts to to Erica and Ali. Without Erica, I would probably not have finished the race as I did – she took care of me and made sure I got everything to get more energy to finish this race. The right person at the right time with the right solutions. Erica’s girlfriend, Ali, was a fantastic support over the course. She waited for her at each aid station while she could have stayed home and/or sleep at the hotel. But she stay awake and brings everything we needed. I did not expected this. Of course, there are many other people I would like to thank: friends (such as Aaron – for the training, Julie – for her support, Kristen for coming at night to help!), co-workers and managers at work (who give me the flexibility to work while training and still trust me) and more generally the running groups I usually join (especially Steel City Road Runners or North Park Trail Runners). I know I am missing other folks, but whoever that was part of the training or the race, thanks for being part of this fantastic journey.

And finally, thanks to the race organizers and the volunteers for making such an event. Everything was well marked (we never got lost, which is a challenge over 100 miles!), the volunteers are super friendly and helpful. This is definitively a great event and if you are looking for your first 50 miler or 100 miler, this might be the event you want to sign up for.

Information and Links

Note: pictures from Kim Mangan – thanks for taking them!

Going the Distance – Burning River 100

This is probably not a big news for my close running friends but might be unexpected for some people I did not see for a while. When this post will be published, I will be on the trails running the Burning River 100 race. At that time, I will probably be struggling around mile 20/30 if I did not already dropped from the course. As my grandmother always told me: “never say never” – even if I said before that I will not do a 100 miles race, I finally got on the starting line. When writing this post, I am wondering why and how I got involved into this. Probably to find myself, forget the pressure of the daily life, understand myself and try to be a better person or just experience again how it feels to be out of my comfort zone. Maybe to prove to myself that I can do it, I am mentally strong enough: at that point, this is more a mental challenge than a physical one. After all, can I get over it? Who knows what are the real motivation(s): the older you get, the more ignorant you feel. And it takes a while to find out why you do such things: most of the time, you finally understand it after you finish the race.

If I ever survive to this race/hike/walk (pick the most appropriate word), I would be done before 10am on Sunday. Hopefully even before 4am. And before 2am if god exists. It will mostly depend on potential injury, how bad I want to finish and if my pacer quicks my ass enough. If you are curious, you can track my progress online using this website (bib number 39). If you are around the trail and/or crazy enough to drive to Ohio and see me, you can follow my progress and come to the aid station that are crew accessible or just go to the finish to see how miserable I will be at the finish (location of each aid-station is in the information guide on the official website). And if you feel like running a mile at night, you can even join and run the last mile with me (just park at the finish and find the frenchy crawling to the finish with her incredible pacer). And if you cannot make it, I hope to see you and celebrate great success or miserable attempt!

Note: I will slap the first guy to tell me he does not even drive further than 100 miles.

It’s not about the goal, it’s about the journey

Scott Jurek completed the Appalachian Trail record, running walking hiking it in less than 47 days (sorry for you if you thought he was running). This achievement is also supposed to be  his “masterpiece”. Great. This was the suspense for more than 46 days in the small ultrarunning community and so many people talked about it. Suddenly, it was the big thing: everybody was excited.

But wait.

The dude just did 3 hours or so better than the previous record, owned by a not-so-famous hiker. During his attempt he had a crew, support from sponsors (look at the picture and try to find one without the name of a brand) and many runners that came and carried stuff for him. There was a live GPS tracking (so that you can track him when you sit your ass in front of your computer), a truck following him and even a ceremony (where he got citations for breaking the park rules – kind of sarcastic). All of that for 3 hours of difference. Over a 2200 miles course, this is not so significant, especially between a runner and a hiker. But also, having support makes a lot of difference. Some will argue than the previous record holder knew the trail before her attempt (she hikes it in 2008 and set the record in 2011) to beat the record but Jurek had the opportunity to do it as well. He just decided not to.

This attempt  showed that there is a lot of room to break this record again: with some  issues during the hike (knee/quad/stomach), it will not a surprise if somebody try to do better soon. The so-called masterpiece will then not be as prestigious as other achievements (e.g. won the Western States Endurance Run seven consecutive times).

For now, the new record belongs to Jurek and he did a great job that almost nobody can do today. But beyond the result, what matters most is the journey.

In that sense, the story and journey of the previous record holder, which did it alone, without much support is more inspiring. She just went out and did it. No bullshit, no big daily picture posted on the internet with a sponsor name, no GPS tracking. She just do her thing without making a big deal of it.

I am not so sure if Jurek’s journey is so inspiring but I definitively have a profound admiration for Jennifer Pharr. This recent story reminded me that the most inspiring people are just not the most famous.

Semantics Matters

The last weeks have been intense but some ideas come in mind sporadically, especially while running or doing other outdoor activities. During the last two weeks, my focus has been on language semantics, and especially why the semantics of our natural languages did not improve over time as much as programming languages did.

One issue in programming language is semantics. A poor semantics will then reduce potential analysis and verification because this is difficult to know what the program is really doing. This is one motivation of modeling language and one of the biggest message I am trying to communication when talking about AADL: better semantics leads to better analysis, which ultimately, will help you to deliver better software at a lower cost. Over decades, the semantics of programming languages evolved in a manner that we reduce the ambiguity (at least, some dudes tried hard) and makes them deterministic.

For example, in C (created in 1972 but one of the most used language – the core of smartphone OS is implemented in C), you create a task by calling a function

pthread_create (pthread_t*, const pthread_attr_t*, void *(*start_routine) (void *), void *arg);

But from a semantics point of view, this is not a task creation, this is a function call, similar to floor(), included in the math library

double floor(double x);

So, from a language perspective, calling floor() is similar to create a task: you just call a function. You cannot distinguish these concepts (you can do it by a syntax analysis but it will not catch everything – there might be some hacks and workaround but this does not address the root cause of the problem). To overcome this semantics issue and improves program analysis, researchers have created language with better semantics. For example, in Ada, the task concept is a built-in language concept. You define the task using the task keyword. You have two different keywords for a function and a task so that you can clearly distinguish a function call from a task creation.

To summarize, over the years, to avoid misunderstanding of concepts and improve our understanding of a program, we reduce the language ambiguity to distinguish the actions performed by the machine.

Now, let’s come back to our natural language, the one we use every day to communicate. Let’s have a look at how we speak and how poor is the underlying semantics. This is not because the language has not an accurate and precise concepts but because we choose not to use them. We have thousands of words but we just use few of some every day. Our vocabulary is really poor, as the way we use them. For example, most people will say: “Let’s watch TV” and not communicate what they really mean, such as “I would like to watch the last Star Wars movie”. You will tell your colleague that you have “stuff to do” rather than “finishing to write the report about the project review”. Beyond the vocabulary issue, the way we articulate our thinking matters and is the message being communicated is interpreted differently by the receiver. This is also one of the reasons for many plane crashes (yes, plane crashes because the pilot and the air traffic control does not understand each other). What we really mean is not only a matter of what we want to communicate but also how we want to communicate.

Surprisingly, over the centuries, it seems that very small efforts have been done to improve natural languages and reduce potential misinterpretation and semantics gaps between languages. And it seems that what has been started since decades in computer science has not been considered by natural language (even if there is a real motivation, the plane crashes being a good illustration – you can also think about the semantics gaps between languages when talking to somebody from another country). The interesting part of it is to know if it has already been considered and if yes, what were the outcomes and why it has not been adopted so far. Just food for thought but definitively something funny to investigate.

Introducing EMFTA, a libre, Eclipse-Based Fault-Tree Analysis tool

A Fault-Tree Analysis (or FTA) is a popular safety analysis recommended by several well-known practices and standards, such as ARP4761. A FTA shows the relation between a fault and its potential contributors (error events) using a simple binary logic (and/or gates). This is nothing else than a convenient representation of the relation between error events. In case you are not familiar with the notation, you can have a look at the related wikipedia page, it explains it in more details. When working with collaborators in safety-critical industries during the last months (avionics, automotive, aerospace, medical), I faced the same issue: most of FTA tools are commercial and there is no good open-source/free alternative. This is not completely true, there is one: OpenFTA. If this is pretty cool to have a FTA open-source program but the graphical interface looks like Windows 3.1 and the code is clearly no longer maintained and outdated. OpenFTA also relies on old image processing libraries (jpeg), which makes it very difficult to compile with the last JDK. Last thing: this is a standalone tool and as most of our modeling tools (i.e. OSATE) are running under Eclipse, it would be cool to have an Eclipse-based tool.

So, in fact, there was a real need for a good integrated Fault Analysis Tool. I had a good project to work on then.

Fault Tree Analysis diagram

Fault Tree Analysis diagram

Introducing EMFTA

So, one night, I decided to put my brain at work and design a new FTA tool, EMFTA (which is a joke – EMF stands for Eclipse Modeling Framework). This is an Eclipse-based Fault-Tree Analysis tool that relies on Sirius, a framework to represent EMF models. The nice aspect of Sirius is it allows you to have several representations of an EMF model while maintaining their consistency: if you change one representation, it will then modify the model and the changes will be reflected in the other representations. For example, in EMFTA, there are two representations: the graphical tree (good to see the decomposition of error events – see above) and table (to edit events information – see below). When you change one representation (e.g. the table), it automatically update the graphical representation (e.g. the tree). Synchronizing the same model across different tools/framework can be challenging and Sirius do a good work for that.


In a nutshell, EMFTA is nothing else than a EMF model to represent a Fault-Tree and its different components (gates, events) associated with a Sirius project to provide the graphical representation. Actually, the current version rely on the latest stable version of Sirius. In addition to providing a viewer and editor for Fault-Tree, EMFTA provides the following capabilities:

  • Generation of cutset from the FTA: it creates a CSV reports containing the different cutset of your Fault Tree
  • Generation of FTA model from AADL models annotated with the EMV2 annex: creating the Fault Tree from an architecture model associated with an EMV2 annex. There was already a bridge for OpenFTA, the plugin now supports the export to EMFTA
Fault-Tree Analysis - Table Representation

Fault-Tree Analysis – Table Representation

Installation and Bugreport

As the project is still starting, the documentation is still minimal. But you have general installation instruction on the general github project page here: https://github.com/juli1/emfta. Use also the github project to submit a bug. If you want to contribute to the source code, submit a pull request or even contact me (I promise I won’t bite).


This tool is yet still a prototype but I plan to improve it during the following months. It could be a first step to a real open-source Fault-Tree Analysis tool. Looking forward, I plan to make it more user-friendly but also introduce a simulation tool that would then produce probability of error occurence (e.g. what is the probability of an error occurrence considering the different cutset and associated probabilities). Also, having this technology connected with AADL, we can leverage such a notation for a security perspective and generate an Attack Tree, which would re-use the Fault-Tree notation for to describe the different attack vector that would then contribute to an attack.


The Internet of Things is spying on you

The Internet of Things (IoT), a fancy expression used since decades to talk about inter-connected devices through a network. It has been a fantasy for several years and is finally taking off. We will have connected electronics everywhere. Anywhere, anytime.

Examples are there: the NEST home automation company has been acquired by google, fitbit went public the last days and google has now a full a full product line for wearable: Android wear. For sure, the applications for the masses are limited now (e.g. fitness trackers, watches) but companies are investing a lot to put technology everywhere (your shirt, your pants, anywhere in your home).

When looking at the product description, this is very appealing: keep track of your sleep, discover abnormal heartbeats, monitor your home through connected camera. This sounds very appealing.

But there are some downside: by giving away our private data, we are opening the door to mass surveillance to many other people. Your manager can track you down and know when you left your home. Your insurance can increase your premium based on your activity. You give away your privacy, and gives for free the data that matters only to you. This is not new and car insurer already proposed to adapt your insurance policy according to how you drive.

Most of us already gave away our privacy, that is the basis of who we are. Many e-mails accounts are handled by online services (e.g. gmail, ymail, etc.) but we forget that we are paying it with our privacy and finally are the final product (if you are wondering how I manage my e-mail, short answer is custom hosting and encryption). Millions of people are using social medias to report where they go and what they like. If you are skeptical, look at the accounts of the big players (google, facebook) and try to guess how they can make so much money with a free product. The downside for us is that by putting everything online, we give away who we are. What is the benefit to meet people as we already know everything about them? Who has any interest in meeting somebody if he already know everything about him/her?

I am not a naysayer. Or even not saying that: “it was better before”. Progress is both exciting and dangerous. And as Uncle Ben used to say: “With great power comes great responsibility”. Technology should be a progress and help us to improve what we are, who we are. We have to use it carefully and efficiently. Social media is a great platform to organize meetings and keep in touch with folks we did not see for a while but it becomes intrusive and a waste of time when we report everything we do with it. Wearable technology follows the same rules: it can be a great way to improve our life but can also be very intrusive. As for every technology (even the most basic one – think about a knife), its impact will depend on how you use it. It can be a great benefit (e.g. cut your food for the knife or tracking potential diseases for wearables) or a total disaster (e.g. kill people for the knife or tracking your movements for wearables).

One thing for sure: the future is exciting and these technologies open new applications and new markets. I am very curious to see how people will use it and how these new technologies will grow and integrate with other devices (phone, car, etc.).

In the Search of the Running Mojo – Laurel Highlands 50K 2015 – Race Report

Laurel Highlands was one of the big race of the year. I wanted to do it since more than a year ago but was not fit enough so I waited and trained before taking the challenge. But in 2015, this was the race. This was my race: I was training on the trail every other month and each training taught me how different it is to run on trails than roads. This course is difficult, especially the first 8 miles, where you have several big hills to climb. The typical training (known as Gate to 8) consists in going to mile 8 and come back, offering a total of 16 hilly miles, destroying your quads and glutes. It also has the specificity to work on different aspects: during the winter, you learn how to run downhill on ice, during the summer, you learn how to manage hydration with a humid and hot climate. If you want to train to run on trails, this is definitively a good spot on Pennsylvania and I consider this is probably one of the major contributor to my lately improvements on trails (the first one is living less than half a mile in a hilly park and eat hills for breakfast).

Steam around mile 24

Steam around mile 24


I signed up as soon as the registration opened. The race costs around $100, which is reasonable considering it is limited to 100 runners and the cost to operate such a race. Once I signed up, I started to regularly go on the trail, train and be used to the elevation. Sometimes with friends. Sometimes alone. No matter what, I had to improve and know the course. I ran it so many times that I had it in my head and knew where I need to walk or run. I was prepare to be on these trails but I still had to improve my nutrition strategy. The last experiences (Forget the PR and the Pittsburgh marathon) were a total disaster and I adapt my nutrition during the last months. It was then time to see the improvements in a real race environment.

Laurel Highlands Medal

Laurel Highlands Medal

Getting There and Race Strategy

I did not want to stay around before the race – as Ohiopyle is only one hour from Pittsburgh, it was very convenient to drive there in the morning. My girlfriend, her relay buddy and I drove directly and got there just on time for the start (we parked 5 minutes before the start actually – which on one hand can be stressful but on the other hand force you not to worry about anything). Julie and Erica were running the relay (with “Faster than your girlfriend“) and myself, running the whole course. There is no fancy packet, just a bib and a tee-shirt. The start is simple: the race director reminds you some general guidelines and give the start by just say “GO”.

The race strategy was simple: it was supposed to rain and the weather was very hot and humid. I decided to go shirtless (no sweat that stick to your body) and only with a handled bottle (a bagpack would implies chafing on my back). As for nutrition, nothing – I was relying on the aid station (mile 11, 19 and 26). For a 50K, you do not need so much nutrition, hydration being more important, especially in hot and humid conditions. Many folks pack a lot of gels but you do not need them – you can just rely on sport drinks for hydration and electrolyte and if you prepared your race correctly, you should have enough energy in the bank!

The week of the race, I tried to get as much sleep as I could – trying to get at least 8 hours every night. Which was challenging to balance that with work duties but still doable. I did not drink alcohol except a single beer at a party. The night before the race, the meal was very simple: two banana pancakes: one with cheese, another with peanut butter and chocolate. Nothing else, keep the KISS principles: Keep It Simple a Stupid. Finally, I made sure I had at least 6 hours of sleep before the race.


Laurel Highlands 50K map

Laurel Highlands 50K map

The Race

When starting, you have to be careful: as the race is mostly on a single track, it is very difficult to pass people. If you plan to finish under 6 or 7 hours, this is better to start in the front of the pack so that you will not be stuck in a pack of slow runners. The race is well marked with yellow signs/marks. The first 6 miles have some hills but nothing really difficult. Mile 6 to 8 requires to climb 1300 feet of elevation, with most of the elevation being between mile 6 and 7. Definitively hard and better to take it as a power hike than a run. I managed to hit the 8 mile marker at 1:35, take a short walk before running to the aid station (mile 11).

When hitting the 11 mile aid station, I was out of water, dehydrated. The aid station, has plenty of appealing food but this is exactly at that point you need to be careful and take what you need and not what you want. I then refill my handled bottle with ice and water, ate watermelon, few M&M’s and get the fuck out of there. I probably stopped at most a minute and quickly get out of there. Next stop will be mile 19, just 8 miles to go.

The next 8 miles were easy. the trails are not technical until mile 16/17. You can actually have a pretty good pace. So I started to pass some runners for the 70 miles race (they started 2 hours before the 50K runners). But I did not realize how much dehydrated I was. After 20 minutes, I was so thirty that I was taking sips every other minutes and was almost out of water again with still 6 miles to go. I needed more water and had nothing left. I then decided to be conservative and include more walk. It was fine until the last mile that includes 400 feet of steep hills. I decided to include a walk break into this last mile and take 3 minutes at the aid station to (1) refill my bottle (2) drink several cups of sport drink with ice to get fluids and electrolytes (3) get some food, basically watermelon that will contribute to keep me hydrated. I just took some M&M’s in a ziploc bag.

I left the aid station in a pretty good shape, ready to hit the last 12 miles. I started with a good pace and included more walk breaks when needed. My target was to quickly hit the 26 miles aid station, the middle of this last leg. The first part of the last leg (mile 19 to 26) is pretty flat and mostly runnable. So I kept going until I saw the aid station. When hitting the aid station, the volunteers proposed bacon, whiskey and other delicious treats. Again, I sticked with the usual strategy (sport drinks + watermelon). And just kept going, pretty confident I will have no issue until the end. At that point, my brain started to be disconnected and the real magic of running kicked in: I had no idea where I was and what I was really doing. But it felt good, awesome. The sensation of flying in the wood, keep running without pain is a fantastic feeling. I just wanted to continue as long as I could.

During the last leg, I started to see the finish coming, and that I was able to run again a 50K without pain. I was flying through the Seven Springs section, which is mostly downhill. Nice sunny area that gives enough energy to push you to the finish. After passing the Seven Springs section, Julie (who was doing the relay) caught me around mile 27/28. I was tired with this running euphoria and she was there and yelled my name. I loved it. This gave me more energy to keep going. It then makes the last two to three miles way more easy. There are a couple of strong hills but after 30 miles, the challenge is more mental than physical. 6 hours and 12 minutes after I started this race, I finally crossed the finish line and finished 19th over 83.

Laurel Highlands Elevation Profile

Laurel Highlands Elevation Profile


After finishing, I grabbed pieces of pizza and watched the other finishers while waiting for a friend to finish. Hanging out at the finish line was really nice: many finishers are staying for a while and there is also a lot of familiar faces from the ultra community.

Everything must come to an end

Everything must come to an end

The Take Away

This race is definitively one of the best around the state. Simple, no fancy packet but a lot of fun. Very well organized, the race director and the volunteers make this event very special and fun. The course is challenging and will put you outside of your comfort zone. If you are planning to do it, I highly recommend that you train on the course before signing up to know exactly in what you are going into. Considering the price and the quality of the event, this is a must do on your list if you like the trails.

On a personal note, this race was a necessary step both from a mental and physical perspective. I was in need for a sign that showed me I was done with this course. This race belongs to a past that I wanted to be away from. This is now done and this is time to focus on something else. I was also looking for getting my confidence back, making sure I have enough fuel in the tank to go for more than 50K. The last 50K (Forget the PR 50K) was a disaster and I was looking to improve my racing strategy. It showed that the changes to my training and nutrition (stop alcohol, being vegetarian) are paying off and will continue until the end of the season (October with Tussey Mountain). The next race will be way more challenging and, after the last three months, having a good race experience was necessary and help to be positive about the next events.

Finally, beyond these consideration, this race brought me back to the basics. No matter who you are, where you are from, how you define your running style or what people say: success depends on you. How much efforts you put into it and where your heart is at. As for me, I loved this race: I loved the exhaustion when going up the hills at mile 7, I loved the sensation of being out of gas before hitting the aid station, I loved being challenged by the elevation, I loved seeing my girlfriend catching me up lately. I loved all of it. I lost my love of running months ago found it on these trails. And it is good to feel alive again.

Thanks again to all the organizers and volunteers, congratulations to all finishers and hope to see many of you on the trails sooner or later! Now, this is time to rest for a while and focus on the next big thing.



The best open-source alternatives to commercial and proprietary software – desktop edition

What is open-source or libre software?

Software is like food: to build it, you need a recipe and tools. Behind the magic that is happening when using your computer, there is a piece of code written in a specific language that is eventually transformed into a machine language your computer executes. When cooking, a recipe gives you the list of ingredients so that you can see and analyze if the content is appropriate for you. In case you have an allergy, you can choose not to cook it and choose another recipe. If you want to replace an ingredient (for example, because of an allergy) or use a better alternative (using organic ingredient for example), this is completely up to you. But to do that, you need something simple: get the recipe. If you do not have it, there is no way you can know what is inside.

Software is like cooking and the source code is the recipe. If you have the source code, you can rebuild the software or even improve it. You can study it, look at its defects and issues and fix bugs or improve the software. For sure, you need to understand the language, but this is the same issue if you receive a recipe in German when you speak only English.

In the software industry, we distinguish mainly two business model for software: open-source (also called libre- or free – I will not go into the details) and commercial. Open-source software gives you access to the source code while commercial software keeps it secret. In other words, with open-source or libre- software, you can analye if the software is good for you. With commercial software, you do not know what is inside.

How different it is from commercial software?

As a user, from a functional perspective, there is not so much difference. Same when going in a restaurant: you just consumer – you eat what is on the menu, without knowing exactly how it is made or cooked – the magic happens in the kitchen! But sometimes, you will be surprised how dirty and bad is the kitchen and you might better investigate what is happening behind the scenes. Same thing with software: investigating what is really done by the software would be helpful to you and understand what others do with your data.

As stated previously, you need to have the source code with the ability to understand it. But when exposing the source code to a large community of developers is alrady a major step forward: you can (at least) rely on a small expert community that will review part of the code (which is not possible with commercial software). Even if you are not a programmer and does not know any programming language, using open-source/libre software is of primary importance. In fact, there is a massive community of developers that review source code, fix issues and improve such piece of software on a regular basis. The main advantages of using open-source software are:

  • security
  • privacy
  • flexibility
  • stability

On the other hand, it can have some issue:

  • lack of support
  • use by experts only

In fact, using open-source or free software is necessary but not sufficient. This is a best-effort approach: it provides some protection and is (for sure) and better solution than commercial software. But it cannot proves and guarantees that it provides all the necessary protections you might expect. Having a total bulletproof system is not feasible, the best strategy is to try protecting yourself as much as possible.

Libre Software Alternatives

Web Browsing

Firefox is the open-source web-browser you need. Many of its features are totally unknown, such as sync (to sync your preferences and bookmarks over several devices) or the anti-ad extensions. Firefox has done a fantastic job to reboot the web and make it more often. They are also pretty good at innovating and introducing new features (such as WebGL).

The browser is available on almost all platforms (Windows, Linux, Mac OS, Android, iOS, etc.) so you can think your profile between many devices and also support a good organization that do its best to protect your privacy.

But … why not chrome or IE?

Chrome is a product from a company making money by selling ads (google). Do you seriously think their business is to make a product that protect your privacy? Internet Explorer (as Chrome) source code is not available so that none of these products can guarantee they will protect your privacy. As firefox is mostly as good as other browsers in terms of performance, stick with the one that is cross-platforms and protect your privacy.


Thunderbird is Mozilla’s (editor of Firefox) brother (ah ah ah) for e-mail. It supports many features and can get e-mails from POP or IMAP servers. It is also privacy-savvy and can be used with encryption support. If you are looking for a good e-mail client, go for it!

But … why not gmail?

gmail is free and easy to use, so, why not using it, right? Well, gmail does not protect your privacy, either to spy on you or to propose you new ads. No matter the reason, I do not want anybody to read my e-mails. Some argue that it does not matter because if you send an e-mail to somebody, this guy has probably a gmail account so that they can already process your data. To this argument, I would oppose the following reasons:

  1. This argument is as saying you are not becoming vegetarian because people will not kill animals and produce meat. If you stop using gmail and encourage people to do so, spying activities will then be more difficult
  2. You can use gmail as a POP3 account and still use encryption. Sure, the service can still process the metadata (headers) but not the content, which is already a big step forward.

No matter what, keep your own shit, protect your data, your privacy and avoid gmail at all cost. Period.

What e-mail provider?

Having a good e-mail client is not sufficient, you also need to protect your data to be processed and analyzed by your e-mail provider. This is known that traditional service providers analyze your messages, even if this is only to show you accurate ads. Regardless the reason, they open your messages to analyze it. Actually, there are few e-mail providers that are privacy-savyy. While you pay traditional services by sharing your privacy, these one must be paid with real money. For about $50 a year, you can then have a good e-mail services that will also protect your privacy. Some names? startmail, runbox, etc. You can find a list of good services online. Instead of paying by giving away your privacy, you just give real money. Yes, everything comes at a price.

Text Editing

Yes, people still edit text files. It might sound weird but in fact, text files are probably the most efficient way to takes notes easily. Using the markdown format, it can be more than enough in most cases. Anyway, if you are running on Windows, I would recommend Notepad++, a pretty efficient tool to edit text released under the GPL. If you are running Linux, use vim (gasp) but if you are looking for a user-friendly soft, just use kate or gedit. And finally, if you are running Mac OS, just change your OS.


Chat is a difficult choice because what matters is not only the software you are using but mostly the protocol you are using. For example, you can use an open-source software for chatting online with your friends on MSN/gtalk but it will still use the gmail infrastructure to transport your messages. Yes, you are not using a proprietary piece of software on your machine but you are still relying on a massive infrastructure that will analyze and process your data.

So, you can use whatever you want but I would recommend not to use any specific chat program but rather stick to e-mail. If you are really looking to discuss with your friends, I guess that the best efficient way to do it would be to use IRC. On the other hand, many folks do not want to use IRC and rather use any crappy webservice. As Churchill said:  “The best argument against democracy is a 5 minutes conversation with the average voter”.


By “productivity” we means software to “produce” something. Using youtube or facebook is not being productive. One of the best software is just OpenOffice.org (or its brother LibreOffice.org). Yes, this is not beautiful but who cares? It works just well and offers almost the same interface from one version to another.

Sure, it does not have all the fancy extensions from Word. But who cares? For 99.999% of users, it does not matter at all. And each version of Microsoft Office tools has a different layout so that you end up by being totally lost from one version to another. In addition, formats between versions are not so compatible (the layout can be different) so you end up by exporting in PDF …

Sure, LibreOffice/OpenOffice might not be as fancy as Word. But it offers a simple interface that works. And that is all what we are asking when we want to be … productive!


Basically, the number one software used to work on picture is Photoshop. But obviously, who knows how to seriously use all of its features? The soft is really complicated to use and, in addition, is really expensive! If you are looking for a cheap (free!) and open-source alternative, just use the gimp. Simple, efficient, you cannot be wrong with it. It runs on all platforms and is pretty stable.

Instead, just use The Gimp. This is sufficient for most of us – and may already have more features than you expect. The Gimp is available for free on several platforms under an open source license. No reason for not using it.

What about the other applications?

This list is just a start. But when looking for a software, try to find an open-source alternative. Not something that is free just as free of charge but free as in freedom. Check the license (GPL, BSD, etc) and make sure the software license is an open-source one. As of today, there are many open-source licenses and a lot of good open-source (or libre) software.

Also, for sure, you are probably using Windows or Mac OS, which are the two main proprietary/non open-source Operating Systems on the market (this can be discussed for Mac OS ). One big step would be to step away from Windows and use a libre alternative (such as Ubuntu for example). That would be more difficult and require more efforts – you will then need to learn again the basics of using your computer.

Five Rules to Reach your Goals

To reach your goal, just follow the road - simple but hard

To reach your goal, just follow the road – simple but hard

Last months have been the opportunity to take the time to step back and try to have an objective point of view on how things are going. Being critical with our inner self is hard: you are judge and party, torn between these two conflicting roles. But this helps you to move forward: we are all wondering if we are doing the right choices and what would have happened if we have done something different. What if we had listened to our parents, continue to study and got this diploma degree instead of getting a shitty job just after high school? What if I finally take this job oversea and left all what I built so far? And what would be my life if I had the gut to make the first move with this girl I always loved? One day or another, such questions come into our mind.

Less than 10 years ago, when I was 25, I realized my life will come to an end one day and then, defined what I really want to achieve. What and how I wanted to be. At that time, my life did not look like it is today – it was the total opposite of what I am today. This was time for change. Today, several of these goals have been met and some are still pending. Among them, one of them was moving and working in the USA. Another one was to develop the capability to explore, visit different countries, meet people and discover new cultures. This goal requires to be able to travel but also fulfill my own needs. Another one was to adopt a healthier and sustainable lifestyle.

For sure, I have not met all my goals but after a few years, I met most of them. Also, as years will pass by, new ideas and challenges will come. I do not know what the future is made of but so far, during this journey, few rules helped me to reach these goals. I wanted to share them, I thought it could be useful. This list is the one that worked for me and there is no proof it would work for you as well.

  1. Know your friends: A friend is somebody that will be there for you no matter what. Keep in mind that you do not know who are your friends until you have a really bad time. Everybody will be there during the party – very fews (and maybe nobody) will be there when you will be a mess. Think about who actually knows and cares about you? Probably not so much. Know your friends but do not blame others that claim to be your friends: if they lie to you, this is their business, not yours. They might be fun, good acquaintance to hang out for a night. But you cannot trust them.
  2. Believe in yourself, not others: We often try to take others responsible for our own failures. When doing this, we are just escaping reality and being irresponsible. Take back your life, your responsibility. Believe in and trust yourself. Take responsibility when you fail and pride when you succeed. Embrace the failure: success comes after a number of bad experiences that finally help you to become better and eventually reach your goal.
  3. Spread the love: do not waste your time and energy on blaming people and create negative energy. For any reason, if somebody was mean or unfair with you, this is their problem, not yours. They might have an issue, had a bad day or just think you are an idiot: the list of reasons to hate somebody is endless. Again, this is not your business,  do not focus on blaming others, invest your time with people you love, motivate and elevate you. Your time on this planet is limited, you cannot afford to waste your time with such people. Which will let me introduce to the last point
  4. Invest your resources strategically: whatever it is – money, time, energy – invest wisely. Avoid wasting resources and try to spend it efficiently. Read (a lot), study, learn from people that inspired you or have successfully reach similar goals as yours. Your resources are limited, so, avoid useless spending and invest wisely. For example, stop wasting your evening browsing on facebook when you can read a book and learn new skills or cultures. Avoid buying a ton of stuff you’ll end up to throw it in the garbage when you’ll move in a few months: you will waste (1) money on it (2) time to throw it in the garbage and (3) resources that were used to produce it. Think twice about your impact before investing anything.
  5. Embrace change: no matter who you are and where you are from, change (good or bad) will happen. There is nothing you can do about it. And this is pointless to even try to revert it. You might lose your job tomorrow, your wife might ask for divorce or you can learn that one beloved family member suddenly died. Change can be hard to accept and can destroy your life. You can deny it for years and waste your time blaming whoever or whatever you take responsible for your lack of luck. But instead of fighting change, embrace it. Take it as an opportunity to have another point of view and change your own life.

Achieving your goals is not about being smart. It is about the ability of keeping up, even when people try to divert from them. Some people might claim they are your friends but they will disappear as soon you experience a hard time. Investors can tell you to put all your money in some stocks but you have to invest them wisely and stick to the fundamentals of the stock market. Some people might hate and disturb you, trying to divert you from your objective, you have to ignore them and keep your objectives in mind. As a runner, I often think that achieving goals is like a race: it is simple (you just have to move forward) but hard (long distance, elevation, etc). But this is definitively not about having a special ability or skill, just the capability to keep your objective in mind. I wish everybody to be happy and get whatever they expect from their life. If this list can help at least one person, then, the time required to write this post was definitively well invested.