How should a 24-year-old invest time?

What are things one should be worrying about? What are the things one should not be worrying about as a 24-year-old?

I’m gonna be 25 on this October. So, I wanna take note this post. It should be helpful for me in next one year, to be better day by day.

When I was 22 years old, I spent time going out with my friends, talking to my girlfriend all the time, spending time smoking-up, and generally being an a$$.

10 years later I discovered a secret that helped me achieve and learn more in 1 year than I had in all the previous 10 years.

Here’s the secret for you to apply this in your life and get results and success that you’ve never even dreamed possible.

Invest your time in the following activities and you will gain more power, money, friends, love and affection.

Your friends will look up to you for your courage to do the things that they’ve only just dreamed about, your family will look up to you and be proud of your many achievements.

Your colleagues will become jealous of your stratospheric success. They will look towards you for advice on how to become successful like you.

If you don’t do these things, 10 years down the line you will wonder where all your time went, what you did wrong to become such a failure.

Your friends will forget you as a has-been, and your family will treat you like that ‘bum-sibling’ they have.

Here are 5 things you should invest your time in everyday to become a success.

But a WORD OF WARNING…

If you try doing these things at the same time you will fail. So pick one of the things mentioned below.

Learn how to do it. Figure it out. Then spend 1 month to learn how to do this better. Practice it every day for 1 month before taking on anything else.

After the 1 month is over this will have become your habit and you will be able to do it unconsciously. Then when you add another thing from the list below it won’t seem very hard.

Within the year you’ll be doing each of these things unconsciously and will have developed an arsenal of habits that will support you for the rest of your life.

The Power Of Creating Good Habits

The biggest secret that man has discovered over the last few decades is the power of habit. Once a habit is established it lasts for a life time.

Developing a habit in the beginning seems hard, but once you master something and include it in your habits, this will be forgotten and you’ll just do it easily.

Think about tying your shoelaces. How do you do that? Do you loop each lace and then knot them, or do you loop one and then knot the other lace through the loop.

Each of us ties our shoelaces differently. But once we get this, we’ll tie them each time the same way, without even thinking about it.

This is the power of habit. This is the first thing you should invest your time in.

A habit is usually formed when you repeat something in the exact same manner everyday for at least 21 days. Some habits take longer, some shorter.

So to average it out – invest 30 days to establish each habit.

The 5 Most Powerful Habits That Anyone Can Learn

These 5 habits will support you throughout your life

Whether you decide to become an academic and do multiple Ph.Ds, or are an athlete looking to become professional.

Whether you are a mother looking to give your kids a better life, or a high powered business woman seeking venture capital investment.

The habits are universal.

1. Take Care Of Your Body

No matter what you do in your life, you will do it in your body. You cannot replace it, get a new one, or trade it in. This is your body and your will live in it.

It might not be the perfect body that you want, but this is the one you have. If you take care of it now – it will take care of you when you 60, 70 or 80 years old.

The way to take care of your body is simple. Eat less & Exercise more.

Spend 30 – 60 Minutes Each Day Exercising.

This does not mean that you join a gym and start pumping weights. It means that you work every muscle in your body.

Spend conscious time to move the muscles in your arms, back and legs. Take the time to join a gym and workout and use your muscles. Do this because most of us now spend more time sitting on couches than moving around.

The human body was made to move around to do things. That’s the first thing to take care of the body. Learn this habit first.

Spend 30 – 60 minutes each day exercising.

Eat Food That Is Fresh & Healthy

The next step to take care of your body is to eat well. Treat your body like a home. This is the home where you live.

If you bring good things to this home the home will become nicer and you’ll enjoy living in it. If you bring rotten stuff into this home the home will decay and you’ll hate living there.

So eat good stuff. Eat as much fresh fruits & vegetables as you can everyday. Include a fruit and vegetables in your diet. This will give you the energy that you need.

Play A Sport That You Like Everyday

This is something that will help you relax your mind. That can get you moving physically and get you out of your head and present in the moment.

Something that you do physically, like Tennis or Basketball. The benefit of these sports (or other sports) is that you get out of your head and get in the moment.

The rush of the moment will help your mind relax for a minute and focus on the right now instead of being stuck on analyzing the past or estimating the future.

Additionally the competition will rejuvenate you. Competition in life is how we grow. The more competition we have the sharper, faster, better we become.

Unfortunately in the current job environment that we work in – we can’t get immediate feedback on competition. Most of the time at work we are working in teams where we need the team to succeed. But our personal success is often based on the failure of other members on the team.

For e.g. You can’t become the manager of your team – if everyone in your team also becomes the manager of your team.

So taking up a sport will give you the immediate rush of competition, the instant feedback of success or failure and you will grow.

Avoid Junk Food

Junk food as the name suggests is junk. It’s useless, worthless for the body. It doesn’t provide the nutrition that your body needs.

If you feed your body with junk food, you will become lethargic, you will lose energy and over a period of time you will gain weight and lose health.

Eat food that is free of preservatives, sugar, corn, syrup and overly loaded with salt and carbs.

These sugar and carbs have an addictive effect on the body and will cause you to crave them more and more causing your body to become dependent on these foods.

Good foods will make your body strong and healthy. Addictive foods will make your body lethargic and rotten.

2. Take Care of Your Mind

We are living in a time when we do most of our work using our minds. We sit on desks and computers creating for people using our minds.

Even if this isn’t true for you, it is. If you are a construction worker who lays bricks, or a day care assistant who helps kids, this is true for you.

Your mind is the one thing that controls your thoughts everyday and the thoughts that you think create the reality that you see around you.

So take care of your mind.

But how do you take care of your mind?

The mind like anything else is has the characteristics of a muscle. You use it, or lose it. And as long as you are using it, it will remain fit and healthy. The minutes you stop using it, it will decay and rust.

So you keep this muscle active by doing the following.

Read Every Day

There is no difference between the person who does not read the one who cannot read. Spend 30 minutes each morning and night reading.

Read motivational books. Books about philosophy, economics, politics, literature. Read fiction. Read self-help books. Read about parenting, read about health. Read about science and technology.

But read a book not a blog.

A book has a very permanent nature. It is written with a lot of thought and research. It is the gist of an author’s life experiences. So read a book everyday.

This will keep your mind stimulated and open to ideas. You will get a number of ideas for each author that you can implement in your life. You will also get opinions from across the globe.

Ideas that would not have reached you if you only spoke to the people you met everday. So read a book. Spend 30 minutes morning and night reading a book.

Write Every Day

The only way to bring your thoughts to reality is to write them down. If you don’t write them down they will be lost to the electric impulses inside your brain.

So write your thoughts down, write ideas that come to you, write your philosophy about life.

Write ever day. This will help you clear your thought and formulate complete ideas.

If you have a problem. Write it down. You will be able to come up with a solution better, once you’ve written down the problem.

If you have a crush on someone. Write it down. Write down the things that you like about that person, how it makes you feel, what you would do for them.

All these things when written down will help clarify your thoughts about love and life, about right and wrong.

Writing will help identify truths about your thoughts and define how you think. As you progress in your writing, read about writing better. Then write better.

The better you write, the better you will think.

Develop Your Mind In Other Ways

The more neural connections your mind has the better it is. The faster it can do things. The better it can fight against disease in old age, like Alzheimers.

You can create new neural connections in your mind by doing new things. The more ‘new’ things you try the more your brain will become developed.

Even if you suck at something – the experience of doing it, learning the rule, trying it out will develop your mind.

Listen to and watch things that will develop you mind. Instead of watching TV, watch TED Talks.

Instead of listening to ‘distressing’ music, listen to sweet, kind music. Listen to Mozart, listen to Beethoven.

Plan to learn a new skill every year. Pick up playing an instrument one year. Spend time learning this instrument like this will be something that you will play all your life.

The next year learn to play a new sport. Something that you’ve never tried before. This will both help your muscles improve and improve your mind.

Avoid Junk In You Mind

Just like your body needs good food to run, your mind needs good fuel to run.

If you feed your mind with junk ‘input’ like mindless television, excessive drama, or constant news coverage whether TV or newspapers, your mind will become lethargic and fatigued.

You will lose the will to do things, since your mind will associate doing things with depressing sad news.

So avoid all news, whether TV or newspaper. Avoid junk TV like dramas on TV. Avoid excessive emotional drama on TV. This will give you space in your head to do things that will help build up your mind.

So avoid junk food for your mind and give it the resources to build itself.

3. Take Care Of Your Relationships

How do you get a friend, by being a friend.

In life you are born with a very few people in your life. Your parents. Your siblings. Your grandparents if they are still alive. Your cousins if you are close to them.

Every other relationship in your life you have to go out and create. You make friends along the way. Some of the good, some of them not so good.

These friends that you make in your journey through life will become your support system. the people you meet everyday, from the grocer, to the kid working at Best Buy.

Sure, at 24 you’re probably thinking, ‘who gives a f*&K about these people…’ but down the line it is these people, these relationships that will matter most to you in your life.

The way to take care of your relationships is as follows

Remember Birthdays & Anniversaries

Even if your friends tell you they don’t celebrate birthdays. Even if your family become sullen when you call them for anniversaries. Remember them.

Even though people say they don’t care, everyone cares about their own special days. When you remember their birthday & anniversaries, they will remember your kindness.

But it doesn’t end there. Remember the special moments in their lives. If they had a kid, remember the date and call them, or write them a card on that occasion.

Yes, even in the day of email, and text. A phonecall or a card have a HUGE impact than a Facebook message or text. Over the years your kindness for others in the form of remembering their special days will snowball and you will become a powerhouse.

It good to know that some one cares about you – both for them and for you, when you are in trouble, or they are.

Remember when they had hard times in their lives. If they were close to their grandparents and they recently passed away. Remember them on that day. Help your friends get over these moments.

When you need them, when your loved ones leave you, your friends will be there to catch you before you fall.

Forgive Them Before They Ask For Forgiveness

In the long scheme of life small things don’t matter. It doesn’t matter if your friend forgot to tell you first about their new job. Or they didn’t tell you about the girl they were proposing to.

Be a gentleman and forgive them in your heart even before they ask for forgiveness. Then let the incident go. They will realize you are a big hearted person and treat you like that.

But when you do this – don’t resent them after. Really forget the incident and forgive them.

This is more for you, then for them. If you keep holding onto every single hurt that any one has done for you then your baggage will become so heavy you won’t be able to go through the door.

You’ll be stuck inside your own head and no one will want to be around you. No one will want to trip on your baggage.

But if you do forgive them and forget the incidents you will be free. Your carefree nature will be reflective in everything that you do and everyone will want to be around you.

Avoid Emotional Vampires

No matter how good you are to people, occasionally there will be some who are vampires. They suck all the time and energy out of you.

Sometimes you will encounter them at your workplace. Some of them will be your childhood friends, or even a member of your family.

No matter what you do, you can’t change them, you can’t help them improve, you cannot guide them.

So the best thing to do with people like this is to avoid them. Though it might hurt you in the beginning, but the best thing for you and them is to avoid them.

You can be kind and make an excuse for not meeting them, but that will only last so long. So take the bigger step and let them know that they are an emotional strain on you – and you’d much rather hang out with more positive people.

People who support your goals, your dreams, your aspiration. People who share your ambitions and values. These are the people who will really help you grow.

The vampires will get hurt – but there is no better way to deal with them. The sooner you take care of them the better.

Really dig deep and find out the people who bother you in your life like that and then stop meeting them and hanging out with them.

CAUTION: If it turns out that everyone in your life seems to be a vampire you either need to change them all, or look inside yourself and change yourself.

Most likely, the conclusion will be to change yourself and your attitude towards them.

4. Take Care Of Your Finances

No matter how you grew up, in abundance or poverty, it is your duty to take care of your own finances.

Even if you parents have taken care of them for you, even if you have a trust fund, even if you have an empty bank account. You are responsible for it. It is your responsibility to take care of your finances.

If you take care of your finances starting today they will take care of you when you most need them. When you are old, or sick, or sending your kids to school, or helping a parent through sickness. Your finances will help you.

If you don’t take care of your finances you will end up in debt. Your shoulders will droop and your mind will be gripped by thoughts of money. You will end up living the life of an indebted servant, where you have to work to pay of your debts.

But how do you take care of your finances

Get Positive Cashflow

To begin taking care of your finances you need to have more income than you spend. You need to have more money coming in to your bank account than you are spending.

Most people don’t learn this until after they get their 1st job or after they’ve maxed out their first credit card.

As long as you have a positive cashflow you can get other things in your life a lot easier. If you don’t have positive cashflow in your life spend the next year or two getting positive cashflow.

Spend the next 15 minutes figuring out how much money you spend, include rent for the house you live in (or your contribution if you’re living with parents), utilities, groceries, car, internet, other monthly expenses, insurance, and monthly spending on shopping & entertainment.

Once you have your expenses take them out of your income. If you have no income – then you have a negative cashflow. Do whatever you can, teach other people, pick up a 2nd job, mow lawns. Whatever you have to do to get this to positive cash flow.

What do you do after you have positive cashflows?

Pay Yourself First

Every cent you earn will be spent by other people for you. The government will want its cut in the form of taxes. The bank will ask for the mortgage payment, insurance, car payments… and so on. Until you don’t have anything left in your account.

So before this happens, pay yourself first.

Get into a retirement scheme where they take 5 – 10% from your salary and put it into a gratuity and provident fund. Then when you get your salary, take another 5 – 10% and put them into another account.

This account is your retirement account – also known as F*&K You money.  This is the money that will give you the balls to say F*&K you to anyone you want to.

Because you have this money sitting in your account – you won’t become a slave to anyone, no one will control you.

But a word of warning… You can’t just get a small amount and then stop. This is a lifetime practice. You have to keep adding to this account. Until it become big enough that you can invest this into assets that make money for you.

This is money that you only spend on assets that make money. Like a house you put up for rent, or government bonds, or dividend funds, or buying a profitable business etc.

Financial Sinkholes To Avoid

If anything sounds too good to be true – it probably is.

A few things to avoid when you’re taking care of your finances.

The Stock Market – Most people will tell you to invest in it – but don’t. Only invest in a S&P Index Fund at best if you really want to. Even though some friend of yours will tell you they have a big ‘tip’ on a stock that could make you millions – don’t invest.

Business Opportunity – If someone tells you that you can make a million dollars in 3 years by investing a small amount of money, or any other such scheme – don’t listen to them. Shut the door, bang the phone, kick them out. If it’s a friend – stop meeting him again.

Lottery Schemes – If you ever hear that you’ve just won a cruise, or are tempted to buy a lottery ticket, or that you will earn X number of points. Run away – don’t walk, run away.

Credit Cards – Yes, even the lovely credit cards. These are probably the worst things invented since the dawn of time. Credit cards don’t increase your spending power – they just make it seem that your spending power has increased. You still have to pay for what you bought, plus interest.

A better alternative is to save for what you want – then when you have the cash then go buy the thing that you wanted to buy.

This has 3 benefits

1) The thing will in all likelihood be cheaper by the time you’ve saved for it

2) There will be a newer shinier model that you can now buy based on the money you saved.

3) You will realize that you didn’t want it in the first place anyway and were buying it on an impulse.

These sinkholes mentioned are all just ways to get a single $1 out of you. Don’t give them the dollar. It represents a part of you, of your life. You might think what’s the big deal about a dollar, but a dollar properly invested can become the greatest fortune in the world.

Read the story about how the Native Americans sold Manhattan for a $1, and how much that dollar would be worth today invested properly. Hint: It is worth more than the value of all the buildings, land, and businesses in those buildings on Manhattan – put together.

5. Take Care Of Your Communication

The biggest problems in the world arise because of mis-communication. People mis-understand each other.

Spouses fight because they don’t understand what was being said.

Employees get fired because of a communication error.

Friends fight because of something that was mis-understood.

Communication errors cause major problems in relationships between friends, employees, board members and even countries.

So take care of your communication. Become a communication master. Become some one who can communicate clearly and effectively. Not just in your speaking, but in your writing, in your thoughts.

But how do you improve your communication?

Communicate At The 6th Grade Level

Yes, at the 6th grade level. This is one of the most important thing you can do for your communication. If you can explain things to a 10 year old you can explain them to anyone.

You might think that most ‘educated’ people will get turned off by this. But the truth is even most educated people think at the 6th grade level. When they are reading research papers, or grading Ph.D thesis will they get into the ‘educated’ mind and think this is stupid.

Just by communicating at this level, your communication will be understood every time. Your kids will understand you, your parents will listen to you, your employers will ‘get’ you.

In fact by communicating at this level every one around you will think you are wise that you are able to explain complex ideas in the simplest of manner.

Learn The Vocabulary Of Whatever You Are Doing

By learning the vocabulary of what you are doing you will learn faster. You will be understood quicker. Your responses will be on point.

Every profession, sport, online forum, clique, had a different vocabulary. The faster you learn this vocabulary and use it in your conversations the quicker you will rise.

If you play tennis, learn every thing that the pros are saying. Learn their meaning and then when you talk to your friends at tennis using the vocabulary will enhance your game.

The same applies to your profession. The sooner you learn the vocabulary of the profession the faster you will progress. But this isn’t a technique, use it to enhance your overall vocabulary.

Putting It All To Work For You

These habits when put in to action will enhance your life profoundly.

You won’t feel it when you turn 23, or even when you are 24. But as you progress as you spend more and more time in this, your results will multiply and compound.

Each day that you spend doing these activities your results will increase ten fold.

By the time you turn 30 you will have more friends who love you, more employers who want to hire you, and more energy than you can imagine possible.

But on top of that because your life is built around a number of activities, not just your job, you will be more fulfilled and happier in life.

I know even starting at 27 yrs old and implementing these in my life – by the time I turned 33 the results I was getting was more than I’d ever imagined.

It still amazes me the way my life keeps changing every 6 months to a year.

Every year. The results will speak for themselves when you apply these.

P.S. Originally written for the question How should a 22-year-old invest time? but it applies more so here.

Functional Programming: The Good and the Bad

Functional programming is becoming more popular today. We have more and more languages that support functional programming styles, and people are learning how to use them. It’s no longer as esoteric as it once was—Ruby, Java, and JavaScript all use functional programming concepts today.

These languages have functional features, but are notfunctional languages. In my experience, functional languages like Erlang or ML have other features that lend a certain safety to programming that mainstream languages don’t. One of these is the use of recursion and argument pattern matching to control program looping. You can use these kinds of constructs for flow control as well. Another is taking constant assignment seriously. I say constant assignment here because in these languages once you’ve bound a value to a variable, that variable is permanently bound to that value until it falls out of scope. The downside to these kinds of features is the difficulty in learning how to develop software using them. For those of us who have grown up using imperative languages, it’s a hard transition.

Recursion and Pattern Matching

Functional programming languages feature runtimes optimized for recursion. Using tail call elimination, these runtimes are able to produce recusion environments that are as efficient as looping by reusing the same stack frame for each recursive call. This, coupled with argument pattern matching, allows you to express functions in the same way you would an inductive proof. You have a basis step and an inductive step. The basis step terminates the recursion, while the inductive step continues the recursion. This way, you can define functions that naturally apply to list or collection processing. Each variable in the functions can also only be bound once per call, making variable assignment easier to manage. A pseudocode example would look something like this:

looper(_) := return 0
looper(h, t) := return t + looper(h)

Here, we define a function looper(.) to sum the contents of a list. The first step is the basis step—if the list is empty, we return 0. The second step is the inductive step—if the list has a head element and a tail element, then we add the tail element to the result of a recursive callback to looper(.). If there’s only one element left in the list, that element is assigned to t, the recursive call maps to the basis step (as his empty), and the recursive structure unwinds.

In a property functional language, tail call elimination guarantees stack frame reuse, so this essentially maps to the same structure as a for or while loop in, say, C.

If you’re going to use something like this approach in Ruby or JavaScript, where you loop over a list with a function, you need to make sure that tail call elimination is available. If it isn’t, you’re going to take a performance hit as you recurse. And you can do this in Ruby or Javascript—you simply move the basis step to the top of the induction step definition.

Constant Assignment

This is very difficult to get used to in functional languages. Maintaining volatile state is pretty tough if the values you use to contain that state can’t change, after all. So how do you work around this?

Well, remember, assigned variables are only constant in the current scope. So how do you get around this? You keep the scope small, and bind the needed variables at function invocation. You can’t write code that changes state during, say, a sequence of loops. So instead, write code thatbinds state at function invocation, and recurse. This way, you can maintain changing state, and do so in a way that makes it more difficult to mistakenly assign incorrect values to state variables.

And don’t use global variables. Tough to get those to fall out of scope.

That’s two of the key differences you’ll see in true functional languages, rather than languages that have bolted on functional programming capabilities. Functional programming techniques can give you a new level of reuse, and make programs more clear, but at a potential cost in non-optimized environments.

Đàn ông lạt dạ, đàn bà cả tin?

Đó là dân gian nói, nhưng những suy ngẫm trong bài này là của người viết. Vì là suy nghĩ cá nhân nên đôi khi hơi phiến diện hống chi chuyện tình yêu lại muôn hình vạn trạng.
Nhưng nghĩ cho cùng, như dân gian nói “không có lửa làm sao có khói”, vì thế cứ xin chép ra đây để mọi người cùng bàn vậy.
Một người đàn ông muốn chinh phục một người phụ nữ thường rất khó khăn, thành bại ở mức độ hên- xui, còn người phụ nữ nào đó đã muốn chinh phục người đàn ông nào đó, nhất định họ sẽ thành công, chí ít thì khả năng thành công cao ngất..
Vì sao? Vì đàn ông lạt (nhẹ) dạ hơn phụ nữ. À không, phụ nữ không lạt dạ bằng đàn ông.
*
Chúng ta vẫn thường gặp những cặp vợ chồng mà cô vợ nhìn bề ngoài ở mức bình thường và dưới bình thường nhưng anh chồng lại xuất sắc trên tất cả mọi phương diện. Những cặp vợ chồng này thường thì bền vững. Vì sao ư? Vì cô vợ này vốn rất khéo (mới như thế) và anh chồng cũng như những người đẹp trai, tài giỏi khác thường rất yếu đuối, cần được che chở.
Ngược lại, người đàn ông hình thức bình thường, có thể tài giỏi, giàu có mà lấy một cô vợ xinh hơn mình nhiều lần thì coi như hôn nhân có nửa phần thất bại.
Phụ nữ là thứ dữ, à không, đàn ông cơ bản là thứ không dữ.
*
Nhiều cặp vợ chồng hình thức rất khác nhau nhưng về sống với nhau lâu thì trở nên… giống nhau.
Chị vợ càng lâu càng giống anh chồng thì người chồng đó rất được yêu.
Nếu người chồng càng lâu càng giống vợ thì đời anh ta khổ rồi.
*
Nếu người đàn ông nói một việc gì đó mà vợ anh ta bảo: “Thế à anh”. Thì anh đó là người có vẻ như được tôn trọng nhưng hôn nhân không bền.
Nếu người đàn ông nói một việc gì đó mà vợ anh ta hỏi ngược lại, thấy có vẻ chướng nhưng những cặp đó hôn nhân lại bền.
*
Những mối tình được quá nhiều người ngưỡng mộ nếu không thành họ sẽ được tiếp tục ngưởng mộ; nếu thành, sẽ có lúc họ xây nhà không cần mua gạch đá.
Những người phụ nữ hay nói về tổ ấm, về hạnh phúc chốn đông người thường là người bất hạnh.
Những người đàn ông nói về tình yêu ở chốn đông người thường là những gã Sở Khanh.
Nói ra, hẳn sẽ có người cãi, nhưng không sao, cãi là một trong những tố chất của người Việt ta.
Bạn bè hay cự nhau thường chơi với nhau rất bền.
*
Con gái thường thích con trai nhiều tài vặt, đàn giỏi, làm thơ hay mà không hề nghĩ, những thứ đó là thứ họ rất ghét khi bước vào cuộc hôn nhân.
Con gái thường thích con trai ga lăng mà không hề nghĩ, họ sẽ căm thù chồng như thế nào khi anh ấy tiếp tục ga lăng.
*
Cả con trai, con gái thường nghĩ, hôn nhân là cái kết đẹp cho một mối tình nhưng không hề nghĩ, đó mới chỉ là khởi đầu của một cuộc tình.
Cả con gái, con trai đều nghĩ, giai đoạn khó khăn nhất của một cuộc tình là khi mình vượt qua những rào cản để đi đến hôn nhân, thực tế thì rào cản lớn nhất mà họ phải vượt qua là những năm đầu chung sống.
*
Con trai thường thích bạn gái chọn váy áo, trang điểm đẹp khi đi ra ngoài nhưng họ không biết rằng, sau này, điều khó chịu nhất là khi chờ vợ mình chọn váy áo và trang điểm.
Con trai thường giành làm hết việc cho người yêu nhưng khi có con họ lại hiếm khi giành chăm con nhỏ mỗi đêm khi con thức giấc.
Người vợ thường kỳ kèo trả giá một mớ rau thấp xuống 1 nghìn đồng. Người chồng ngồi trên xe máy chờ không cần tính toán khi hút hết nửa gói ba số.
Con gái nói không là có.
Con trai thường hứa rồi thôi.

ĐIỀU GÌ TẠO NÊN MỘT CUỘC HÔN NHÂN HẠNH PHÚC ?

Lựa chọn bạn đời là một trong những quyết định quan trọng bậc nhất nhưng cũng thường là quyết định bị lựa chọn sai nhiều nhất. Vậy những nhân tố nào thực sự ảnh hưởng tới một cuộc hôn nhân hạnh phúc, và làm thế nào để tìm kiếm được người bạn đời phù hợp cho mình ?

image

“Nước chảy đá mòn”, “mưa dầm thấm lâu”…là một số trong rất nhiều hiện tượng nói lên cùng một chân lý: những kết quả lớn lao thực chất đều là tập hợp của rất nhiều hoạt động nhỏ nhặt. Tình yêu và đặc biệt là hôn nhân cũng vậy. Nhìn bề ngoài, một cuộc hôn nhân hạnh phúc có vẻ sẽ có mô típ của một câu chuyện cổ tích, hay một kịch bản phim, khi những con người hoàn hảo trải qua rất nhiều khó khăn để đến với nhau và sống hạnh phúc cùng nhau mãi mãi. Nhưng hạnh phúc của con người không được cảm nhận trong những khoảng thời gian dài đến vậy. Hạnh phúc nằm trong những khoảnh khắc, những chi tiết nhỏ nhỏ như một nụ cười, một cái ôm, một món quà, một câu chuyện thú vị.

Vì vậy, khi nghĩ đến một cuộc hôn nhân hạnh phúc, điều chúng ta thực sự cần tìm kiếm không phải là một công thức “hoàng tử – công chúa hạnh phúc mãi mãi về sau”, mà là tìm kiếm một mối quan hệ mà ta có thể tìm thấy hạnh phúc ở từng ngày một trong suốt 20,000 ngày sẽ chung sống bên nhau.

Vì vậy, hôn nhân không phải là những gì diễn ra trong tuần lễ trăng mật, không phải là những ngày Valentine, không phải là bữa tiệc ăn mừng khi hai bạn mua được ngôi nhà đầu tiên. Hôn nhân là chuyện ăn tối trong ngôi nhà đó cùng nhau 4386 lần, là những ngày bình thường chung sống cùng nhau.

Và tất nhiên, hôn nhân chẳng dễ dàng gì cả.

Để một mối quan hệ đủ mạnh mẽ để hai người có thể chung sống cùng nhau 20,000 ngày và làm điều đó một cách hạnh phúc, thì cần phải có rất nhiều thứ, và 3 thứ quan trọng nhất là:

MỘT TÌNH BẠN THÂN THIẾT

Phần lớn mọi người đều thích dành thời gian cho bạn bè của mình – đó là lý do chúng ta là bạn bè. Nhưng có một số người bạn đặc biệt, mà khoảng thời gian ở bên họ cực kỳ thú vị. Đó là những người có thể vượt qua được “bài kiểm tra giao thông”

“Bài kiểm tra giao thông” là như thế này. Nếu bạn kết thúc buổi gặp gỡ với ai đó và thực sự tận hưởng việc đưa họ về nhà, thì họ đã vượt qua được “bài kiểm tra giao thông”. Bạn thực sự thích khoảng thời gian ở cùng với họ.

Vượt qua được bài kiểm tra này có rất nhiều ý nghĩa. Nó có nghĩa là bạn thực sự thích tương tác với người đó, và ở bên người đó bạn sẽ không bao giờ chán nản.

Gần như không có gì quan trọng hơn trong việc lựa chọn bạn đời là tìm kiếm ai đó có thể vượt qua được “bài kiểm tra giao thông”. Một tình bạn vượt qua được “bài kiểm tra giao thông” khi tiến triển trở thành một mối quan hệ sẽ mang lại những ưu điểm sau:

Không khí hài hước

Niềm vui: hai bạn sẽ có được niềm vui ngay từ những tình huống không vui vẻ như trễ máy bay, tắc đường…Và sự vui vẻ giữa các cặp đôi đã được chứng minh là một chỉ số quan trọng để dự đoán về tương lai của mối quan hệ.

Tôn trọng cách suy nghĩ của nhau: một người bạn đời đóng cả hai vai trò là người tâm tình trong đời sống và công việc, và nếu bạn không tôn trọng cách họ suy nghĩ, bạn sẽ không muốn kể cho họ về những suy nghĩ của bạn về công việc, hay bất kì điều gì thú vị khác mà xuất hiện trong đầu của bạn, bởi vì bạn không thực sự quan tâm lắm tới ý kiến của họ.

Số lượng đáng kể những sở thích chung: điều này rất quan trọng, bạn sẽ không phải từ bỏ thói quen hay sở thích của mình khi tiến tới một mối quan hệ chung.

Một tình bạn vượt qua được “bài kiểm tra giao thông” sẽ ngày càng phát triển sâu sắc và thú vị hơn theo thời gian.

CẢM GIÁC VỀ “GIA ĐÌNH”

Nếu ai đó bắt bạn phải ngồi lên ghế trong suốt 12 tiếng mà không được di chuyển, thì chắc chắn suy nghĩ của bạn sẽ là “hãy chọn ngồi ở tư thế thoải mái nhất”. Bởi vì bạn biết rằng, khi làm một thứ gì đó trong thời gian dài, thì ngay cả sự khó chịu nhỏ nhất cũng sẽ phát triển và biến thành một cực hình. Do đó, khi bạn phải làm điều gì đó trong khoảng thời gian dài, rất dài, tốt nhất là chọn những thứ mang lại cho bạn cảm giác cực kỳ, cực kỳ thoải mái.

Khi đem nguyên lý này áp dụng cho hôn nhân, một sự “không thoải mái” liên tục giữa bạn và bạn đời có thể trở thành một nguồn không hạnh phúc bất tận, đặc biệt khi nó lớn dần lên theo thời gian, khá là giống như trường hợp tra tấn trên chiếc ghế. Cảm thấy “ở nhà” có nghĩa là cảm thấy an toàn, ấm cúng, tự nhiên, và hoàn toàn là chính mình, và để có được cảm giác này với bạn đời của mình, mối quan hệ của hai bạn cần phải có một vài thứ:

Tin tưởng và an toàn: bí mật là thuốc độc đối với một mối quan hệ, bởi vì chúng tạo nên một bức tường vô hình bên trong mối quan hệ, khiến cho cả hai người đều cảm thấy cô đơn. Và ngoài ra, những bí mật sẽ tạo ra sự nghi ngờ, một khái niệm trực tiếp mâu thuẫn với khái niệm “gia đình”. Đó là lý do tại sao ngoại tình trong khi đang có một cuộc hôn nhân hạnh phúc là một trong số những thứ thất bại và thiển cận nhất mà một người có thể làm.

Sự hấp dẫn tự nhiên: để tương tác giữa hai bạn trở nên dễ dàng và tự nhiên, và bạn có thể cảm thấy ở cùng “tần sóng” với nhau.

Chấp nhận khuyết điểm của nhau: khiếm khuyết là một phần nằm trong định nghĩa của con người. Và một trong những viễn cảnh tồi tệ nhất về hôn nhân là bị vợ / chồng chỉ trích cả đời vì những khiếm khuyết của mình. Điều này không có nghĩa là mỗi người không cần tự cải thiện bản thân mình, nhưng đối với mối quan hệ hôn nhân, thì thái độ tích cực của người vợ / chồng nên là “khi đã chấp nhận một người, là chấp nhận cả ưu điểm và khuyết điểm của người ta”.

NỖ LỰC ĐỂ TRỞ VUN ĐẮP CHO HÔN NHÂN

Con người luôn yêu thích tự do, vì vậy gắn kết con người lại với nhau trong một mối quan hệ là rất khó. Nếu như mong muốn một cuộc hôn nhân bền vững mà không nỗ lực vun đắp cho nó, thì cũng giống như mong đời một sự nghiệp thành công mà không bỏ ra chút công sức nào.

Vậy những kĩ năng nào mà các cặp đôi cần biết để vun đắp cho một cuộc hôn nhân hạnh phúc ?

Giao tiếp: tầm quan trọng của giao tiếp đối với mối quan hệ cũng giống như oxy với sự sống. Giao tiếp kém là nguyên nhân hàng đầu khiến các cặp đôi tan vỡ.

Duy trì sự bình đẳng: trong một mối quan hệ, rất dễ xảy ra tình trạng một người lấn át người còn lại. Điều đó không thuận lợi cho mối quan hệ và cũng hạn chế những tiềm năng của mối quan hệ.

Biết cãi nhau đúng cách: tranh cãi là chuyện không thể tránh khói trong hôn nhân. Vấn đề là với các cặp đôi biết cãi nhau đúng cách, họ sẽ tháo ngòi căng thẳng, tiếp cận vấn đề với sự hài hước, và thực sự lắng nghe phía bên kia. Họ sẽ tránh việc vì giận dữ mà lỡ lời hay trở nên độc địa. Những đôi biết cãi nhau đúng cách cũng sẽ ít cãi nhau hơn, vì họ hiểu được phần lớn các cuộc cãi nhau đều xuất phát từ những khác biệt cơ bản trong tính cách của hai người. Điều này không thay đổi được, nên họ học cách chấp nhận, kiềm chế và tránh việc cãi nhau nhiều lần về cùng một vấn đề.

Mọi mối quan hệ đều có những khiếm khuyết và chúng ta không thể hy vọng gặp được một ai đó đạt được tất cả điểm A+ trong các tiêu chí kể trên. Chúng ta chỉ có thể hy vọng tìm được một người có thể thỏa mãn được đa số các tiêu chí kể trên, bởi vì mỗi một tiêu chí này đều đóng vai trò rất lớn trong hạnh phúc cả đời của bạn.

Và bởi vì những tiêu chí kể trên đã rất khó để thỏa mãn rồi, nên bạn đừng tìm cách làm phức tạp nó lên bằng việc đưa thêm các tiêu chí bên ngoài của riêng bạn. Phần lớn những tiêu chí đó sẽ không có ảnh hưởng lớn tới hạnh phúc của bạn. Ví dụ như sẽ rất thú vị nếu anh chàng của bạn biết chơi guitar, nhưng đừng biến việc chơi guitar thành một tiêu chí “phải có”.

Service vs Factory – Once and for all

 

This article explains once and for all the difference between services and factories and why we want to prefer services over factories.

The difference between services and factories

Okay, so what is the difference between a service and a factory in AngularJS? As we all know, we can define a service like this:

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});

.service() is a method on our module that takes a name and a function that defines the service. Pretty straight forward. Once defined, we can inject and use that particular service in other components, like controllers, directives and filters, like this:

app.controller('AppController', function (MyService) {
  MyService.sayHello(); // logs 'hello'
});

Okay, clear. Now the same thing as a factory:

app.factory('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

Again, .factory() is a method on our module and it also takes a name and a function, that defines the factory. We can inject and use that thing exactly the same way we did with the service. Now what is the difference here?

Well, you might see that instead of working with this in the factory, we’re returning an object literal. Why is that? It turns out, a service is a constructor function whereas a factory is not. Somewhere deep inside of this Angular world, there’s this code that calls Object.create() with the service constructor function, when it gets instantiated. However, a factory function is really just a function that gets called, which is why we have to return an object explicitly.

To make that a bit more clear, we can simply take a look at the Angular source code. Here’s what the factory() function looks like:

function factory(name, factoryFn, enforce) {
  return provider(name, {
    $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
  });
}

It takes the name and the factory function that is passed and basically returns a provider with the same name, that has a $get method which is our factory function. So what is it with this provider thing? Well, whenever you ask the injector for a specific dependency, it basically asks the corresponding provider for an instance of that service, by calling the $get()method. That’s why $get() is required, when creating providers.

In other words, if we inject MyService somewhere, what happens behind the scenes is:

MyServiceProvider.$get(); // return the instance of the service

Alright, factory functions just get called, what about the service code? Here’s another snippet:

function service(name, constructor) {
  return factory(name, ['$injector', function($injector) {
    return $injector.instantiate(constructor);
  }]);
}

Oh look, it turns out that when we call service() it actually calls factory(). But it doesn’t just pass our service constructor function to the factory as it is. It passes a function that asks the injector to instantiate and object by the given constructor. In other words: a service calls a predefined factory, which ends up as $get() method on the corresponding provider.$injector.instantiate() is the method that ultimately callsObject.create() with the constructor function. That’s why we use this in services.

Okay, so it turns out that, no matter what we use, service() or factory(), it’s always a factory that is called which creates a provider for our service. Which brings us to the mostly asked question in the Angular history: Which one should I use?

Which one to use?

Asking that question on the internet takes us to a couple of articles and StackOverflow answers. The first is this answer. It says:

“Basically the difference between the service and factory is as follows:”

app.service('myService', function() {

  // service is just a constructor function
  // that will be called with 'new'

  this.sayHello = function(name) {
     return "Hi " + name + "!";
  };
});

app.factory('myFactory', function() {

  // factory returns an object
  // you can run some code before

  return {
    sayHello : function(name) {
      return "Hi " + name + "!";
    }
  }
});

We now already know what happens behind the scenes, but this answer adds another comment. It says we can run code before we return our object literal. That basically allows us to do some configuration stuff or conditionally create an object or not, which doesn’t seem to be possible when creating a service directly, which is why most resources recommend to use factories over services, but the reasoning is inappreciable.

What if I told you, we can do the exact same thing with services too?

Yeap, correct. A service is a constructor function, however, that doesn’t prevent us from doing additional work and return object literals. In fact, constructor functions in JavaScript can return whatever they want. So we can take our service code and write it in a way that it basically does the exact same thing as our factory:

app.service('MyService', function () {

  // we could do additional work here too
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

Hoppla, so what now? We just realised that, depending on how we write our services, there’s no difference between the two at all anymore. The big question remains: Which one should we use?

Services allow us to use ES6 classes

Of course, writing services in that way is kind of contra productive, since it’s called as a constructor function, so it should also be used like one. Is there any advantage over the other at all then? Yes, there is. It turns out that it’s actually better to use services where possible, when it comes to migrating to ES6. The reason for that is simply that a service is a constructor function and a factory is not. Working with constructor functions in ES5 allows us to easily use ES6 classes when we migrate to ES6.

For example, we can take our code and rewrite it in ES6 like this:

class MyService {
  sayHello() {
    console.log('hello');
  }
}

app.service('MyService', MyService);

An ES6 class is really just a constructor function in ES5. We wrote about that in Using ES6 with Angular today, if you haven’t read that article yet, I’d recommend checking that out.

With factories, this is not possible because they are simply called as functions. I hope this article made everything clear and encourages people to not use factories over services, if they don’t know what to use.

Send and receive STOMP messages for node.js apps

stomp.js is a simple JavaScript library to send and receive STOMP messages from a Web browser using Web Sockets.

version 2.3.0 support for node.js. This makes it possible to send and receive STOMP message from any node.js app by connecting to a STOMP broker on its TCP port (usually 61613) or on its Web Socket.

Register a npm package stompjs  by typing:

npm install stompjs

and in the code, requiring the module:

var Stomp = require('stompjs');

To connect to a STOMP broker over a TCP socket, use the Stomp.overTCP(host, port) method:

var client = Stomp.overTCP('localhost', 61613);

To connect to a STOMP broker over a Web Socket, use instead the Stomp.overWS(url) method:

var client = Stomp.overWS('ws://localhost:61614/stomp');

Apart from this initialization, the STOMP API remains the same whether it is running in a Web browser or in node.js application.

A simple node.js app that sends and receives a STOMP message can be coded in a few lines:

var Stomp = require('stompjs');

// Use raw TCP sockets
var client = Stomp.overTCP('localhost', 61613);
// uncomment to print out the STOMP frames
// client.debug = console.log;

client.connect('user', 'password', function(frame) {
  console.log('connected to Stomp');

  client.subscribe('/queue/myqueue', function(message) {
    console.log("received message " + message.body);

    // once we get a message, the client disconnects
    client.disconnect();
  });
  
  console.log ('sending a message');
  client.send('/queue/myqueue', {}, 'Hello, node.js!');
});

In this example, the client connect to the STOMP broker on its TCP socket by calling Stomp.overTCP(host, port):

var client = Stomp.overTCP('localhost', 61613);

To connect on its Web Socket, you only need to change the creation of the client by calling instead Stomp.overWS(url):

var client = Stomp.overWS('ws://localhost:61614');

This means that if your code uses stomp.js, you can run the same code in the Web browser or in node.js That may prove handy for testing…

Why another STOMP client for node.js when there are already a dozen?

I believe the code of stomp.js is already the best of them.

It is distributed by the major STOMP brokers (ActiveMQ, Apollo, HornetQ, and RabbitMQ), widely used, thoroughly tested anddocumented.

The STOMP protocol implementation is the same whether the client is running in a Web browser or in node.js. The only differences are the timers and the socket implementations (native Web Socket for Web browser, net.Socket for node.js). The socket implementation can still be customized and many users run it over SockJS

There are likely some corner cases to iron out but the main features (including heart-beating) should work as expected.

Note that the node.js support is done outside the stomp.js file. If you only need to use STOMP from the Web browser, this changes nothing: you only need that file (or its minified version).

Enjoy!

Bye bye the old things

Another new year comes, bye bye the old things of 2015. You brought me too much, a not bad job, an environment to grow, a good man to love… so many things, I’m so appreciated for this 2015.

Hi 2016, keep the good things and give me new challenges.

11034945_10205386484675238_8269648040047609632_o

11205984_10153262243683967_4150798621736805063_n

11204406_10153259876793967_2356811931101401169_n

11187236_10153261612448967_1622534739184576874_o

Vượt qua quãng đường hơn 90km bằng xe đạp mới rước được anh chàng này về… >o<

IMG_0203

 

IMG_0062

IMG_0064

IMG_0068

 

PHP Vs Node.js, Which is Best?

PHP vs Nodejs
Technology is continually changing and so is the people’s choice of working on different technologies. PHP and Node.js are two technologies that are now in vogue among the programming community.
Both are primarily used in web development and are open source. Given their similarities, it would also be in the best interests of a Node.js developer and also a PHP ninja to know their differences and the areas they are best at.
Language syntax:
PHP is very much different from other programming languages. There is no one specific way by which the PHP developershave to work in PHP. The developer can start with some multi-line programs. Then, add functions and then move to PHP4-like objects. However, between the versions, PHP syntax can change. Due to this, PHP is a bit chaotic.
When we compare Node.js, which is written in JavaScript, with that of PHP, its language syntax is brief and succinct. So, with regard to Language syntax, it is Node.js that is the clear winner. The reason to use Node.js is that Javascript on the client and server can be used by full-stack developers.
Development Tools:
Both PHP and Node.js perform well in terms of development tools. Integrated development environment, editors, debuggers and validators are offered. However, an area where Node.js scores well is the presence of Node Package Manager in it.
The npm ( as it is commonly called) enables installation and management of dependencies. It also allows setting configuration variables and defines scripts. It deserves mentioning that npm contributed to the growth of build tools – Grunt and Gulp.
Environments:
Technologies can be used in diverse areas. When it comes to using PHP, the developer can use PHP for command line development and for desktop. However, many overlook these areas. Node.js developers have gone many steps further in using it for platforms and ecosystems. JavaScript can be used in desktop, terminal, browser, server and embedded systems.
Performance:
Node.js requires fewer dependencies than PHP. And in contrast to the PHP interpreter, Node.js is a smaller and a faster interpreter. Other performance aspect where Node.js surpasses PHP is that its applications run permanently. In Node.js, single database connection object can be reused. Nonetheless, in PHP, Memcached can be used.
Support for developers:
It is necessary for a developer to seek assistance during the course of working on programming. Support and help from official documentation and also resources like StackOverflow, forums and courses are required. PHP is really good in this front. A wonderful manual it offers is highly supportive. Whereas, Node.js developers can only get less help. However, it has quality documentation.
So, Which is best:?
While a Node.js developer would experience really good features and tools offered by it, PHP too offers some exceptional features. So, PHP or Node.js? Which is best? To put it euphemistically, “Node.js is a step ahead.”

Imperative vs Declarative

Let’s generalize and say that there are two ways in which we can write code: imperative and declarative.

We could define the difference as follows:

  • Imperative programming: telling the “machine” how to do something, and as a result what you want to happen will happen.
  • Declarative programming: telling the “machine”1 what you would like to happen, and let the computer figure out how to do it.

1 Computer/database/programming language/etc

Examples of imperative and declarative code

Taking a simple example, let’s say we wish to double all the numbers in an array.

We could do this in an imperative style like so:

var numbers = [1,2,3,4,5]
var doubled = []

for(var i = 0; i < numbers.length; i++) {
  var newNumber = numbers[i] * 2
  doubled.push(newNumber)
}
console.log(doubled) //=> [2,4,6,8,10]

We explicitly iterate over the length of the array, pull each element out of the array, double it, and add the doubled value to the new array, mutating the doubled array at each step until we are done.

A more declarative approach might use the Array.map function and look like:

var numbers = [1,2,3,4,5]
 
var doubled = numbers.map(function(n) {
  return n * 2
})
console.log(doubled) //=> [2,4,6,8,10]

map creates a new array from an existing array, where each element in the new array is created by passing the elements of the original array into the function passed to map (function(n) { return n*2 } in this case).

What the map function does is abstract away the process of explicitly iterating over the array, and lets us focus on what we want to happen. Note that the function we pass to map is pure; it doesn’t have any side effects (change any external state), it just takes in a number and returns the number doubled.

There are other common declarative abstractions for lists that are available in languages with a functional bent. For example, to add up all the items in a list imperatively we could do this:

var numbers = [1,2,3,4,5]
var total = 0

for(var i = 0; i < numbers.length; i++) {
  total += numbers[i]
}
console.log(total) //=> 15

Or we could do it declaratively, using the reduce function:

var numbers = [1,2,3,4,5]

var total = numbers.reduce(function(sum, n) {
  return sum + n
});
console.log(total) //=> 15

reduce boils a list down into a single value using the given function. It takes the function and applies it to all the items in the array. On each invocation, the first argument (sum in this case) is the result of calling the function on the previous element, and the second (n) is the current element. So in this case, for each element we add n tosum and return that on each step, leaving us with the sum of the entire array at the end.

Again, reduce abstracts over the how and deals with the iteration and state management side of things for us, giving us a generic way of collapsing a list to a single value. All we have to do is specifywhat we are looking for.

Strange?

If you have not seen map or reduce before, this will feel and look strange at first, I guarantee it. As programmers we are very used to specifying how things should happen. “Iterate over this list”, “if this then that”, “update this variable with this new value”. Why should you have to learn this slightly bizarre looking abstraction when you already know how to tell the machine how to do things?

In many situations imperative code is fine. When we write business logic we usually have to write mostly imperative code, as there will not exist a more generic abstraction over our business domain.

But if we take the time to learn (or build!) declarative abstractions we can take dramatic and powerful shortcuts when we write code. Firstly, we can usually write less of it, which is a quick win. But we also get to think and operate at a higher level, up in the clouds ofwhat we want to happen, and not down in the dirty of how it should happen.

SQL

You may not realise it, but one place where you have already used declarative abstractions effectively is in SQL.

You can think of SQL as a declarative query language for working with sets of data. Would you write an entire application in SQL? Probably not. But for working with sets of related data it is incredibly powerful.

Take a query like:

SELECT * from dogs
INNER JOIN owners
WHERE dogs.owner_id = owners.id

Imagine trying to write the logic for this yourself imperatively:

//dogs = [{name: 'Fido', owner_id: 1}, {...}, ... ]
//owners = [{id: 1, name: 'Bob'}, {...}, ...]

var dogsWithOwners = []
var dog, owner

for(var di=0; di < dogs.length; di++) {
  dog = dogs[di]

  for(var oi=0; oi < owners.length; oi++) {
    owner = owners[oi]
    if (owner && dog.owner_id == owner.id) {
      dogsWithOwners.push({
        dog: dog,
        owner: owner
      })
    }
  }}
}

Yuck! Now, I’m not saying that SQL is always easy to understand, or necessarily obvious when you first see it, but it’s a lot clearer than that mess.

But it’s not just shorter and easier to read, SQL gives us plenty of other benefits. Because we have abstracted over the how we can focus on the what and let the database optimise the how for us.

If we were to use it, our imperative example would be slow because we would have to iterate over the full list of owners for every dog in the list.

But in the SQL example we can let the database deal with how to get the correct results. If it makes sense to use an index (providing we’ve set one up) the database can do so, resulting in a large performance gain. If it’s just done the same query a second ago it might serve it from a cache almost instantly. By letting go of howwe can get a whole host of benefits by letting computers do the hardwork, with little cognitive overhead.

d3.js

Another place where declarative approaches are really powerful is in user interfaces, graphics and animations.

Coding user interfaces is hard work. Because we have user interaction and we want to make nice dynamic user interactions, we typically end up with a lot of state management, and generic howcode that could be abstracted away, but frequently isn’t.

A great example of a declarative abstraction is d3.js. D3 is a library that helps you build interactive and animated visualisations of data using JavaScript and (typically) SVG.

The first time (and fifth time, and possibly even the tenth time) you see or try and write d3 code your head will hurt. Like SQL, d3 is an incredibly powerful abstraction over visualising data that deals with almost all of the how for you, and lets you just say what you want to happen.

Here’s an example (I recommend viewing the demo for some context). This is a d3 visualization that draws a circles for each object in the data array. To demonstrate what’s going on we add a circle every second.

The interesting bit of code is:

//var data = [{x: 5, y: 10}, {x: 20, y: 5}]

var circles = svg.selectAll('circle')
                    .data(data)

circles.enter().append('circle')
           .attr('cx', function(d) { return d.x })
           .attr('cy', function(d) { return d.y })
           .attr('r', 0)
        .transition().duration(500)
          .attr('r', 5)

It’s not essential to understand exactly what’s going on here (it will take a while to get your head around regardless), but the gist of it is this:

First we make a selection object of all the svg circles in the visualisation (initially there will be none). Then we bind some data to the selection (our data array).

D3 keeps track of which data point is bound to which circle in the diagram. So initially we have two datapoints, but no circles; we can then use the .enter() method to get the datapoints which have “entered”. For those points, we say we would like a circle added to the diagram, centered on the x and y values of the datapoint, with an initial radius of 0 but transitioned over half a second to a radius of 5.

So why is this interesting?

Look through the code again and think about whether we are describing what we want our visualisation to look like, or how to draw it? You’ll see that there is almost no how code at all. We are just describing at quite a high level what we want:

I want this data drawn as circles, centered on the point specified in the data, and if there are any new circles you should add them and animate their radius.

This is awesome, we haven’t written a single loop, there is no state management here. Coding graphics is often hard, confusing and ugly, but here d3 has abstracted away most of the crap and left us to just specify what we want.

Now, is d3.js easy to understand? Nope, it definitely takes a while to learn. And most of that learning is in giving up your desire to specify how things should happen and instead learning how to specify what you want.

Initially this is hard work, but after a few hours something magical happens – you become really, really productive. By abstracting away the how d3.js really lets you focus on what you want to see, which frankly is the only thing you should care about when designing something like a visualisation. It frees you from the fiddly details of the how and lets you interact with the problem at a much higher level, opening up the possibilities for creativity.

Finally

Declarative programming allows us to describe what we want, and let the underlying software/computer/etc deal with how it should happen.

In many areas, as we have seen, this can lead to some real improvements in how we write code, not just in terms of fewer lines of code, or (potentially) performance, but by writing code at a higher level of abstraction we can focus much more on what we want, which ultimately is all we should really care about as problem solvers.

The problem is, as programmers we are very used to describing thehow. It makes us feel good and comfortable – powerful, even – to be able to control what is happening, and not leave it to some magic process we can’t see or understand.

Sometimes it’s okay to hold on to the how. If we need to fine tune code for high performance we might need to specify the what in more detail. Or for business logic, where there isn’t anything that a generic declarative library could abstract over, we’re left writing imperative code.

But frequently we can, and I’d argue should, look for declarative approaches to writing code, and if we can’t find them, we should be building them. Will it be hard at first? Yes, almost certainly! But as we’ve seen with SQL and D3.js the long term benefits can be huge!

Illustration Shows Why The Eight-Hour Workday Is An Outdated Concept

How productive do you believe you are in your eight-hour workday? There may be a few ways to define the answer:

Semi-productive: you’re halfway there but you still slack occasionally.

Mediocre: you don’t really try, but somehow you get things done.

Or,

Top-level: you like to keep yourself super busy.

Well, no matter which one you most identify with, the truth is that you could probably be doing better.

Eight hours a day at an office desk is not the definition of productivity. You can thank the British Industrial Revolution for it. They worked out that this allotted time would yield higher outputs within a fixed schedule for factory workers. This may have worked in the 1800s, but today it has become an outdated logic which needs to be reworked.

Podio has broken it down in this infographic. They explain how squeezing as many hours as possible into one workday to be “productive” can be counterintuitive. In the end, everything depends less on time and more on your focus, motivation, and overall well-being — all of which link directly to your energy levels.

“My goal is no longer to get more done, but rather to have less to do.” — Francine Jay

Podio

OK, procrastination break is over. Time to get back to work.

From http://www.lifehack.org/304790/illustration-shows-why-the-eight-hour-workday-outdated-concept?ref=fbp&n=1

Tôi là ai – Và nếu vậy thì bao nhiêu?

Trong phim Matrix (Ma trận), con người được nối mạng vào ma trận và có quyền tự chọn một cuộc sống theo ý mình. Giả dụ như được làm George Cloonefeea72548b1e830c5866704a9af68053y hay Johansson Scarlett để tung tẩy trong một cuộc sống hoành tráng, hoặc sút những bàn thắng để đời như Ronaldinho hay Kaká, hoặc mỗi ngày lên giường với người tình trong mộng. Bạn nghĩ sao, liệu có ai muốn sống lâu dài trong hoàn cảnh ấy không?

Có thể thoạt tiên bạn thấy đó là một trải nghiệm sung sướng theo nghĩa nào đó – một dạng cuộc đời thứ hai không kèm rủi ro mà bạn được dấn thân vào. Nhưng nếu phải sống vĩnh viễn như vậy? Sẽ là một cuộc sống ra sao, khi ta luôn luôn thành công? Và bất cứ thời điểm nào cũng có được mọi thứ để bảo đảm cho bạn hạnh phúc? Kinh khủng quá!

Vậy thì rõ ràng còn có một cái gì đó quan trọng hơn hạnh phúc, vì hạnh phúc được bảo hành vĩnh viễn sẽ trở nên tẻ nhạt khủng khiếp. Trong cuộc sống, mọi thứ có một giá trị nhờ sự tương phản. Người ta có thể mong muốn có nhiều hạnh phúc, nhưng không phải hạnh phúc liên tục từng giờ từng phút. George Bernhard Shaw, thi sĩ và kịch tác gia người Ireland đồng thời là một triết gia thông thái, biết rõ điều đó từ lâu: “Cả đời hạnh phúc! Không ai chịu nổi; vì đó sẽ là địa ngục trần gian”. Có một hình dung còn tệ hơn, đó là người ta không được tự quyết định về cuộc đời mình. Quyền tự quyết là một tài sản quý giá đến nỗi đa số chúng ta không ưa đeo đuổi một thứ hạnh phúc do người ngoài áp đặt. Có nghĩa là người ta phải tự kiến tạo và xây đắp hạnh phúc của mình, chứ hạnh phúc mà được ban tặng thì mất giá trị. Chiến thắng phỏng có ý nghĩa gì, nếu người ta không thể chiến bại? Và sách truyện sẽ tẻ làm sao, khi độc giả biết chắc chắn là nó sẽ có đoạn kết như mong muốn? Vậy thì, như đại văn hào Nga Lev Tolstoy từng nói, hạnh phúc “không phải là ta được phép làm gì ta thích, mà là ta luôn luôn thích cái ta làm.”

Câu trả lời của Tolstoy đã rất sát cái mà người ta vẫn ưa gọi là “ý nghĩa cuộc sống”. Trong sách này ta sẽ gặp nhiều triết gia, và bằng cách riêng của mình, dù trực tiếp hay gián tiếp, tất cả họ đều cố trả lời chính câu hỏi đó. Triết gia thời cận đại, như Decartes, không nghiên cứu đề tài này. Họ cho rằng ý nghĩa tổng quát của thế giới không phải là câu hỏi của con người, mà là một câu trả lời có sẵn do Chúa ban cho. Ai sống thời Trung Cổ, Phục Hưng hay Baroque, người đó không cần bận tâm đến câu hỏi về ý nghĩa cuộc sống. Nhà thờ nói cho họ biết Chúa có ý tưởng và chủ định với con người, và thế là ổn. Mãi đến khi ý thức hệ của chúng ta tiến vào tâm điểm thế giới để thế chỗ cho trật tự thế giới do Chúa định sẵn thì bước ngoặt ấy mới dẫn thẳng đến câu hỏi về ý nghĩa cuộc sống. Việc nghiên cứu câu hỏi ấy một cách nghiêm túc mới chỉ diễn ra cuối thế kỷ 18, đầu thế kỷ 19.

Đối với Immanuel Kant, cuộc sống được định đoạt bằng việc thi hành nghĩa vụ đạo đức. Như đã nói, thế thì hơi ít. Đối với Jean-Jaques Rousseau thì ý nghĩa cuộc sống là được phép và có thể sống theo đúng bản năng tự nhiên. Con người không bao giờ phải làm gì mà mình không muốn. Đối với Jeremy Bentham, ý nghĩa ấy nằm trong hứng thú tối đa cho mình và mọi người. Còn William Paley tìm ý nghĩa đó trong số lượng tối đa “các công việc hữu ích.”

Giữa thế kỷ 19 câu hỏi này mới thật sự bùng nổ. Giới hậu sinh của Kant, Fichte và Hegel nhún vai ngơ ngác khi đối diện với khối tác phẩm kỳ vĩ của tiền bối. Trước đó triết học thắng thế và tự tôn mình lên thành bộ môn tổng quát giải đáp mọi câu hỏi của cuộc sống bao nhiêu, thì giờ đây kiến thức về một cuộc sống thành đạt là gì lại càng ít ỏi bấy nhiêu. Đó là những tòa nhà tư tưởng đồ sộ, song lại đứng trên một nền móng mỏng manh của sự nhận biết về cuộc sống thực tế. Arthur Shopenhauer, Sören Kierkegaard, Ludwig Feuerbach và cả Karl Marx, mỗi người một cách, nỗ lực tìm câu trả lời mới. Schopenhauer cương quyết phủ nhận rằng con người “sinh ra để hạnh phúc”. Vì con người là nô lệ bất khuất cho ý chí của chính mình nên một ý nghĩa tự do và cao siêu sẽ ít có đất dụng võ. Cả Nietzsche và Freud đi theo hướng đó. Họ cho rằng, ngay câu hỏi về ý nghĩa cuộc sống đã là biểu hiện của yếu nhược về thể chất hay tinh thần. Người khỏe mạnh thì không cần biết đến ý nghĩa cao siêu.

Các bậc thầy tư tưởng thế kỷ 20 có đặc điểm là họ từ chối trả lời rõ ràng và tuyên bố không quan tâm chuyện đó. Một ví dụ đặc biệt nổi bật là Ludwig Wittgenstein. Ông xếp câu hỏi về ý nghĩa cuộc sống vào mục “các câu hỏi ngớ ngẩn”.

Dễ hiểu là môn nghiên cứu não bộ cũng không trả lời được câu hỏi về ý nghĩa cuộc sống. “Ý nghĩa” không là một đơn vị đo lường khoa học, không là một đồ vật, và cũng không là một quá trình điện sinh lý. Như vậy thì ý nghĩa tàng hình với chính mình. Hay nói một cách khác: cái cân cũng không được được trọng lượng của mình.

Hôm nay chỉ có thể trả lời câu hỏi về ý nghĩa cuộc sống một cách chủ quan: tôi nhìn thấy ý nghĩa gì trong cuộc sống của tôi? Nguyên nhân rất đơn giản. Ý nghĩa không phải là đặc tính của thế giới, mà là một cấu trúc đặc thù nhân tính. “Ý nghĩa” là một nhu cầu và một ý tưởng của chúng ta, những động vật có xương sống. Xét như vậy thì vấn đề không phải là đi tìm một ý nghĩa trong thế giới, mà chúng ta phải tạo nó ra cho mình. Vậy câu hỏi về ý nghĩa là một câu hỏi nhân tính. Ngay cả khi cần tìm ý nghĩa khách quan trong thiên nhiên thì điều đó cũng luôn luôn diễn ra theo hình dung của con người. Và những hình dung đó phụ thuộc vào ý thức hệ của chúng ta, nghĩa là phụ thuộc vào tính logic và ngôn ngữ của con người.

Có lẽ nguyên nhân quan trọng nhất của nhu cầu đi tìm ý nghĩa của chúng ta là do chúng ta biết, một ngày nào đó chúng ta sẽ chết. Bộ óc của chúng ta biết rằng mỗi ngày, mỗi giờ, mỗi giây nó lại tiến gần hơn tới thời điểm lụi tàn, quả là một ý tưởng không hay ho cho lắm. Một số nhà nhân loại học coi sự biết đó là ranh giới giữa người và vật.

Có người nói nhẹ nhàng mà súc tích: “Thực ra không có gì đặc biệt cả. Đơn giản là hãy thân thiện với mọi người, tránh ăn đồ nhiều mỡ, thỉnh thoảng đọc một cuốn sách hay, mời bạn bè đến nhà chơi, cố gắng sống trong hòa bình và hài hòa với mọi người.” Còn nếu các bạn hỏi Precht thì sẽ nhận được câu trả lời hay hơn nhiều: “Hãy giữ tính tò mò ham hiểu biết, hãy thực hiện các ý tưởng tốt đẹp của mình, hãy làm cho năm tháng chứa đầy sự sống chứ đừng để cuộc sống đầy phè những năm tháng.”