Tuesday, 30 December 2014

Lambda Calculus, Lambda Abstraction

Lambda Abstraction is the way we define an anonymous function in λ calculus. Suppose we have a function like f(x) = 2x which in fact is a function that maps any x to 2x, now from the previous posts we already knew that in λ calculus the expression 2x (which is a term) can be shown as * 2 x, but the way we show this as an anonymous function is like:

λx. * 2 x

See there is no equality sign, here λx is something anonymously like f(x) and the dot after it shows the start of the evaluation formula. So a familiar C or Java-like function like the following:

int doubleIt(int x) {
  return 2 * x

Will be something like the following in Lisp-like language for example (which you can use it inline of course):

Sunday, 28 December 2014

Lambda Calculus, Expressions

Until now we understood that λ calculus is nothing but a formal system to describe algorithms of computer programs. Although in theory it has mathematical support, but we are not interested in this scientific detail, so let us continue talking about how we can define algorithm and programs with the help of λ calculus.

Lambda calculus introduces an inexpensive way to express a function or an algorithm body. Nothing has all the good things,  λ calculus introduces an inexpensive way to write a function but it is a bit not like what we used to see in non-functional systems, like ordinary programming languages (say java 6 for example).

Suppose you want to multiply 1 and 2, divide 3 by 4 and then add these two results. There are some notation methods of doing this:
  • Infix notation: 1 * 2 + 3 / 4
  • Postfix notation: 1 2 * 3 4 / +
  • Prefix notation: + * 1 2 / 3 4

Almost everybody knows the infix notation this is what usually we do in school math and we expect compilers pars our expressions in programming. But λ calculus expression is in prefix notation and this may bother us at first. 

Friday, 26 December 2014

Lambda Calculus, Computable Function

A computable function (here function doesn't have the meaning of what we have in calculus) is basically nothing but what we usually do in a body of a function or procedure during programming. It is a mathematical term which widely has been used in "Computability Theory".

Let's describe it in this way, you have a function gets some inputs and based on some algorithm it computes required output. The process you do on these inputs to get the result or the applied algorithm can be simply demonstrated by a computable function. It is a formalized mathematical method of describing intuitive notions of algorithms.

Note that if we want to bring exact definition and reasoning of what computable function is or can be derived, we need to go deep in some advanced mathematics and some information on "μ-recursive functions", "Turing Machine", "Register Machine", ... are also required. So for now, we just try to describe things in more descriptive and tangible ways rather than theoretical ways. So again, we just accept by definition that a computable function accepts inputs and after applying a procedure or an algorithm on the given inputs, it calculates the output. Now let us expand our knowledge on computable functions.

Wednesday, 24 December 2014

Lambda calculus, a formal system

Forget about the name "Lambda calculus" which is strange, grand and somehow serious of course,  it is nothing but a well-defined abstraction method in mathematics like what we already learned in school as Euclid's Elements in geometry, Algebra or Calculus and ... These abstraction methods are also called formal systems. A formal system should have a language (symbols and grammar) to be able to express systems with some rules and axioms. In fact, you can assume any programming languages as a formal system which is capable of expressing systems in terms of language statements. As I mentioned a formal system also should have some axioms and rules like what we have in Euclidean geometry, Algebra or Calculus.

Tuesday, 23 December 2014

Software Integration - Connection Points

If you have a quick look at the titles of my previous posts, you'll find that one of my interests in software engineering is the things related to software integrations, titles like stability patterns, feedback, and ... Although all of these topics can be get used in both inside single software design and in integration of many subsystems, but using them in software integration is much more important, because:
  • When a team or person writes a software they know about the entire components well enough to adjust them to work well together.
  • When you try to integrate software systems to work together in an ecosystem as a single software solution, you usually don't know how these subsystems behave in a different situation so the integration environment must have some intelligence itself to keep them working. And this is the place where the stability patterns, feedback, ... comes into play.
System integration is the process of gathering several subsystems or components together make them  work together as a single system while making sure the system works well in every condition. Now let us see what in an integration is that makes it difficult to make the whole system stable.

Friday, 19 December 2014

Circuit Breaker - 3

Here I will try to describe how easy is to implement a circuit breaker (CB) in your system to have a more stable software environment. First we have to choose the architecture we want to apply the CB on it. What about have it as a separate module either as a single binary or just as a piece of code which works in a binary with other parts.

Sample software circuit breaker.
Look at the diagram, the CB we are going to build is going to be something like it. The component we are going to build has, at least, these parts:

  • Input: An interface module to receive data from one component.
  • Output: An interface module to transmit data to the next component.
  • Control: A central control unit which manages passing or dropping or disconnecting the flow and/or flow path.
Now let us see how we can have this CB to do what we want, suppose we want it to drop more than 1000 data packet per second and we want the CB in a simple single thread mode. The following shows a pseudo code for what we have in mind:

Thursday, 18 December 2014

Circuit Breaker - 2

We saw how circuit breakers (CBs) work in electronics and power engineering, and mentioned that there are many more usage examples in other industries too. Now let us see how we can get the benefit of using a CB in software design.

Using circuit breaker in software design
Look at this diagram, at the top we have two components, they can be two software modules in a single binary or two separate binaries in a single machine communicating to each other through shared memory, a pipe, ... or they may even be two separate binaries working in a network. In any of these cases component 1 simply sends some data packets to component 2, they may also have some feedback of how things are going on the other side too.

The idea is of using a CB is exactly like what we have in other industries, separating components if something wrong happens to the flow of data, one of the components or ... Depending on what situations or conditions the CB separates two component, we can simulate the behavior of a fuse, circuit breaker, IDE circuit breaker and ... (in my point of view naming doesn't matter that much) 

Wednesday, 17 December 2014

Circuit Breaker - 1

When you see and compare electronics or electrical engineering with
Omron circuit breaker
software engineering, you'll find many ideas which software engineering borrows from them and one of them is using Circuit Breakers. We have both electronic and electrical circuit breakers which have widely used in industry and power distribution. They are used to protect two different circuits from each other to not let them have a negative effect on each other.

Note that circuit breakers are not fuses, they look like them but are different. They detect a fault condition and they separate the circuits they are protecting. They connect the circuits manually or automatically once they detect the fault no more exists, we will see how we can use the same idea to protect two different application in a software ecosystem when one feeds the other.

In electronics, you can build a simple DC circuit breakers with Zener diodes and very advanced ones with many active components to do complicated control over circuits behavior.

Friday, 12 December 2014


If you check a dictionary for the meaning of the word "longevity" you will see:

longevity:  noun  \län-ˈje-və-tē, lȯn-\ 
the fact of living for many years, the length of life, the length of time that something or someone lasts or continues

Ripped 60-Year-Old Bodybuilder
A familiar story 
After completing the software, doing many tests and giving a final demo to the user, fixing and testing again and again. It comes the time to give the software to the user and have it work in real world. Three important things may makes user unhappy:

  • Finding some bugs
  • Wishing to have some new features or changes
  • Crashing at the first days of working

These things happens and none of them is our concern, you usually fix them in a short period of time. The problem is when software works for long period of time, say months, years without restarting usually some other strange things happens, like:

Wednesday, 10 December 2014

Software development is like doing art

I think the culture, the personality and so many other aspects of the people working on a software do have an effect on any parts of the software development cycles. In fact, it is not only a software but any other things human builds or invents or creates somehow has the personality influence and signs  of the builder, inventor or creator.

For example, when you get familiar with the way a famous painter paints, you can guess if a specific painting belongs to him or not because you know they way he/she thinks or works. Or in music you can see the different way of creating master pieces from two different composers in the same era. Compare the Chopin's piano work with Beethoven's in the following the first is one of the Chopin's nocturnes and shows the feelings of this composer at the time of composition:

Monday, 8 December 2014

Drawing can help clarifying ambiguities

I was thinking of the way ancient people used to write, using graphical symbols as glyphs. The thing which usually comes in mind is Egyptian hieroglyphics. The difference between our modern language and the Egyptian's is that our alphabets are just symbols for sounding while for them each  symbol has had a meaning. When you see a picture of a man worshipping the sun, you can faster understand what this picture means rather than reading a line that says what this man is doing.

Our mind doesn't like to (or can't) pay attention to the details easily, you have to force it to get focused. This is why we can read words have a typo, especially those had correct start and end, we may even don't understand they have spelling errors. Do you think that the brain is that fast when you pass the streets it scans any people, cars, and ... finds out the shape of them. I don't think so, it has a history of how a human or car looks like, and just by discovering some signs assumes that this is a car and that is a pedestrian. Just think about this example, when you seat in a car, looking out the window how fast you brain should be to process all the things you see in detail?

Sunday, 7 December 2014

UI comparison

Couple of days ago I went to a music store for the first time in Canada with one of my friends. I never have been in such a place here. What got my attention was the different look of the following stage pianos from UI perspective. These are two models of Roland and Korg stage pianos, both more or less at same price. See the difference between these two at the pictures.

Korg SV1

If you take a close look to the Korg, the buttons, nubs and ... all looks like vintage electronic devices, super easy to use for everybody. There are no LCD screen or LED and you have all you need to access at the same time in front of yourself. (It somehow reminds me plane dashboards.)

Saturday, 6 December 2014

Can we overcome the software ambiguities?

Ambiguities are almost everywhere, sometimes they have no harm at all, sofa, couch, love-seat ... whatever don't harm anyone, sometimes it doesn't harm but makes confusion, like when a girl says to her boyfriend "let's go out and have some special dinner tonight". The poor guy gives her a special 200 dollar dinner as he thinks, but after the dinner she says "It was the worst dinner I ever had!" The problem is "special dinner" doesn't mean same for them. Similar things happen every day in our line of business too, "You have to develop a stunning user interface!" And when we build the user interface it has much ambiguity, rather than not being what the owner has asked for. (We will talk about the UI ambiguities later)

Development cycle adds more ambiguity to a system.
But how human make the ambiguities clear? Suppose you have brought an idea or have built something like a program, or ... The thing with a creature or phenomenon that has evolution path is that every step it goes forward the ambiguity increases.

Either you want to clarify the previous ambiguities or add some new features you make the thing more complex.

For example, there is an ambiguous word in a language and you want to make it clear, you have to add some similar words with minor differences. Do you think all people can learn these and use them in proper ways? The idea for language is much more complicated because people play with language. I always think the people who are responsible for updating dictionaries can do nothing to prevent this, people in the street bring many awkward words in the language and make them public and these poor dictionary guys should find out a way to put them in the dictionary or accept them as part of the language.

Friday, 5 December 2014

Ambiguity in languages, sciences, software, ...

Merriam-Webster online dictionary defines ambiguity as "something that does not have a single clear meaning". I don't want to talk about ambiguity itself now, just want to open a discussion around the reason why we human do have ambiguity in anything we develop at all.

Every human speaking language has ambiguity and many obscure words, in English for example (which I'm trying to learn and this is the main reason of this post) check the followings:
  • What the is the difference between "dull" and "pull" that makes pronounce them "dəl" and "po͝ol"!
  • Why "right" & "wright" have similar pronunciation? or "buy" & "by", "cell" & "sell", ... 
  • Or "fine" with different meanings like "very thin" or "best quality", "excellent", ... (these are some of its meanings if we consider it as an adjective)
  • ...
You know better than me how many of these ambiguities and obscures we can find in any human languages, these were just some words there are many more in grammar rules and ... Are these ambiguities only exist in human developed speaking languages? or we face such problems in other developments too?

Thursday, 4 December 2014

Do things in the right place and at the right time

Suppose you have just 25% fuel and want to go to a city which you just know it takes an hour or two of driving from your home. You know there is two gas stations on the road, one near your city and the other near the target city. In which one of them are you going to stop and fill up the tank?

You probably go for the nearest gas station then drive calm toward the destination. Even if something unusual happens you still have another gas station in the road. This is what we usually do. But why we don't do the same when we write code, design algorithms or software?

How many times have you experienced the "not enough free disk space", "disk full", ... after a while the operating system starts to copy files! I always wonder why some operating systems don't check the size of the file or files being copied to the target disk and the required free space before starting the copy process.

Wednesday, 3 December 2014

Using positive feedback in software

There is something like a positive feedback loop in society panic. Someone says something horrible to a small group of people, they all panic and tell the story to their friends and relatives and each of them does the same ... then suddenly the whole society panics. Another example which seems have positive feedback in its nature is nuclear fusion, they way the sun generates energy or the atomic bomb works which even Einstein had been underestimated it. Big bang itself has had some positive feedback loop in its nature.

The above examples show that positive feedback naturally likes to spread or increase something as fast as possible, does this feature have any usage in software? Sure it does, let us see an example.

Positive feedback example
Have you ever worked with systems which have many connected online users (or any other processes) and because of a software upgrade, power outage, maintenance or ... you need to restart the system. In this situations, we usually can't instantly connect all the users to the system.

Tuesday, 2 December 2014

Using negative feedback to stabilize software - 2

OK, now is the time to see how negative feedback makes a system stable. We saw in the previous post that the system doesn't know under how much load is going to be, so there must be some mechanism for increasing or decreasing the calculation power. If we assume the whole system is running as a single binary we can have some worker classes, if the system works as some separate binaries we can have worker binaries or even worker machines. They all need the same feedback mechanism, here we talk generally about this mechanism.

Using feedback loops to make the software ecosystem stable.
Look at the diagram and compare it with the one we had in the previous post. As you see I've tried to clearly show the feedback loop.

Note that we already assumed that the line queue is a thread safe or multi-access queue. The feedback mechanism for read process reads the LQ size in fix intervals and just sends the result to read process, which also has the responsibility of controlling feedback loop. Here the read process gets the LQ size and if it reaches to some critical point it stops reading. This mechanism just prevents the blind reading files and putting lines in the queue. So the code for the sensor and control section of feedback loop can be something like this which must be executed in a separate thread or binary repeatedly like each second.

Using negative feedback to stabilize software - 1

What does software stabilizing mean? We talked about stability patterns in software ecosystem before and saw that both in multi binary software systems integration (ecosystem) or in a complex modular software we need to take care of how different binaries or modules work together. Wrong behavior of one binary or module may lead to a disaster in the whole system. In fact, most of the time we need to consider some negative feedback loop to prevent propagating faults or letting the ecosystem goes to some unknown situation. The loop can be some part of the binaries or it can be an external binary itself talking to other binaries.

I remind you that we need feedback loops in a complex system in which we can't exactly be aware of what components are doing so instead of an exact following of what they are doing we just check and control the system's outputs and try to adjust the components behavior to keep the system up and running.

Monday, 1 December 2014


Feedback is one of those topics I always enjoy reading or studying about it and, in fact, it helps a system to make a correct decision most of the time. What I mean is we humans can not making any decision before gathering information on what we've already done. Feedback concept is exactly the same, get a sample of output (what you've already done) and bring it to the system as an input and then process it with other inputs and continue this cycle.

Feedback helps a system to adjust its process to get the required results, especially when a system gets complicated enough, the control section can't keep track of the entire internal processes (indexes), at this situation the feedback helps the control section to keep the system up and running.

Feedback concept
In the diagram, you see the process module which operates on input and feedback. So the process module has the input and also an idea of what output currently is. So this process can easily adjust itself to do exactly what it has to do. On the other hand, the feedback module directly senses the output and prepares a signal or required data for the process module and sends it to this module. This loop in which feedback module gets output sample sends it to process module and ... is called "feedback loop".

Friday, 28 November 2014

Theory of constraints

Although it is related to management and perhaps production or manufacturing systems, but since in any software code, some parts of the code do the management and have some control over the other operational parts or resources we can use this theory to study software programs and software ecosystems too.

If you have enough of resources like memory, cpu, disk and ...., and your load is low and don't expect more performance perhaps this "theory of constraints" (or TOC for short) can be just a theory for you. But if you are dealing with a lack of resources or low-performance TOC might help you to think about your software design again and perhaps modify some parts to get better performance or better use of available resources.

Thursday, 27 November 2014

Stability patterns do exist in our societies too

You may think I'm joking but stability patterns do exist in every society, small, medium or large like
in a family, at work, in city or country and .... Before describing this claim, I have to add if you look for the roots of whatever human has brought or invented in computer science (even in other sciences), you'll surely find something like something in nature and the stability patterns have the same story too.

Let us consider a small company which produces bicycles. The production line has some divisions, to make it simpler we just assume the production line has three parts, P1 is responsible for building whole wheel, P2 is responsible for building the complete frame and there is also P3 which assembles wheels on the frame. And there is also just an inventory for a limited number for complete bicycle and each of P1 and P2 also has a small local inventory space.

Wednesday, 26 November 2014

Stability patterns in software ecosystem

If you ever have been involved in a big software project in which there are many different binaries should integrate and work together, you should have noticed that sometimes malfunctioning or failure of one of these binaries, causes the whole system get broken, while most of the time such a big software ecosystem should not really get broken because of just malfunctioning of one part.

You know what this mean? Consider a human body as a closed ecosystem, should the whole human body get broken (dead) if suddenly something happens to one of the feet? Of course not, there should be some mechanism doesn't let the fault or error spreads across the ecosystem.

Tuesday, 25 November 2014

Entropy as a measure of anomaly detection

Let's talk a bit more about the anomaly and then leave it for a while, there are many ways and methods we can talk about these are just some easy practical solution which in fact really works. The thing is I would like to talk about some practical aspects of software engineering too, so this will be my final post on anomaly for a while.

OK, first of all, what is entropy? There are many definitions which more or less all have the same meaning at the end, even when you talk about the entropy in thermodynamics it somehow has the same meaning of the entropy we have in information theory. If you get in depth and reach to a point exactly feel what it means, you'll find that the way entropy describes the behavior of the molecules of gas is not that different from the way we can use entropy to describe the behavior of for example the volume of a network traffic.

Monday, 24 November 2014

Calculating a reference & acceptable distance for anomaly detection

We haven't talked about anomaly detection yet, but we did talk about calculating the distance between a sample data called X and a reference data called R. We talked about a threshold or margin of acceptable distance too (M). In this post, we want to introduce a very simple but effective way of finding the reference and this acceptable distance.

Suppose we have a verified sample set like S which is, in fact, something like:

S = { X | X is a vector like (X1, X2, X3, ..., Xn) , X is not anomaly sample }

Now since these samples are all valid, we can define the R as the point in the middle of the all given X in S as below:

R = { (R1, R2, R3, ..., Rn) |  Ri = (∑ Xij ) / n , where j loops over all elements of S elements }

It is nothing but calculating the average of each dimension of the samples and assume it as the dimension of the R. If it is hard for you to accept that R is exactly in the middle of the points we have in n-dimensional space, try to figure it out in 1, 2 or 3-dimensional space.

Sunday, 23 November 2014

Time series as a point in space

We usually like to predict or study the behaviour of variables through the time. Temperature, exchange rate, electricity usage, visitors of a website, traffic usage of the Internet and many more things can be studied during a period of time. For example the average temperature of a city can be studied during each month of a year, the number of the visitors of a site can be studied during each hour of a day ... and here by the study, we mean finding a reference pattern or baseline of how these variables change during their one cycle.

Saturday, 22 November 2014

A simple way of calculating anomaly

Suppose you have a set of n-dimensional variables like the following:

S = { (X1, X2, X3, ..., Xn) | Xi € Di , 1 < i < n }

and we also know somehow that the reference value should be something like the following:

R =  (R1, R2, R3, ..., Rn)

And now we want to now if a Xj is an anomaly or not? Note that you can always assume that your sampled values each with n-dimension can be shown in an n-dimensional euclidean space, even if some dimensions are not numeric. For example if samples are specification of a student in grade 12, like final courses score, weight, height, behaviour, age, number of friends, the skin color and ...  you can always map all of this information for a sampled student to a vector X = (X1, X2, X3, ..., Xn) in an n-dimensional space. You just need some transformation functions to transform non-numeric values to numeric values. In other words for each non-numeric Xi , you need a Ffunction which accepts some non-numeric values in its domain and transforms them to numeric values in its range.

Thursday, 20 November 2014

What is anomaly?

Merriam Webster's dictionary says that anomaly is something which is unusual or unexpected. The word "anomaly" itself comes from the Latin / Greek word "anomolia", meaning "uneven" or "irregular". So what is unusual or unexpected? Something we have learned its behavior and/or physical specifications through the time and now we see it / one of its instances in other way.

You usually go for a coffee around noon on working days, and the barista has been getting used to it. One day you come and ask for exact coffee you usually order, but he gets surprised. He also gets surprised even if you go there on working days at the same time but order something other than a usual thing. So it seems the nature of anomaly just exists if we either study the phenomena in periods of time or study a phenomena or instances of it in many places.

Wednesday, 19 November 2014

Never ending software projects

I've been working in medium to large scale software projects as a developer, designer, technical  and project manager. Unfortunately, some of them despite of working, never had a chance to be released. I'll try to bring some of the most important things I found as reasons for having never ending software projects. Some of them may also be a reason for project failure too.

Final decision maker
Software development can not be done in complete democratic environment. You can not vote to use a technology or doing this or that all the time, especially when making a decision has time and money costs, there must always be a reason to do something. Even if you are going to make a wrong technical decision, there must be some financial or another reason to make that decision.

If your project doesn't have someone who has the authority or power of saying the last word then, believe me, you are in a big trouble. There are many points in software development cycle which you are facing approaches seem similar and none of them has any advantage over the others. People can't make a decision at these situations, there must be someone with enough power to do this. This guy is responsible for the decisions he makes so it is better for him/her has software background too, not just a manager with administration background.

Giving job to people who think are genius in all aspects 
I never forget a project in which some C++ developers who had just little MySQL experience where arguing on something like writing a query in this or that way. You had to have only a couple of years of SQL writing skills to choose the way the query must be written, but they were arguing and trying to discover how to write a double group joined SQL statement they were arguing about.

Someone who knows all the used technology stack 
There must be someone in the project who knows all the technologies used in the project. The project manager and/or the one who makes the final decisions must trust this guy otherwise project goes to voting or endless arguments most of the time to choose what to do in technical situations or software layer coupling.

Gold plating the software
This one is one of the most important reasons for a project becoming endless. I'll talk about it later, but for now, let's have a brief talk. It means paying more than necessary attention to something. For example focusing on choosing colors of the UI more than it requires, more than the functionality itself. Even when the project has almost finished we are trying to change the colors of the UI again.

Gold plating happens both where the user defines the requirement or developer uses technologies. The team who is responsible for user requirements may always changes the requirements to make the software better and the project manager or developers may also try to change the technologies because after a while they think used technologies are not cutting edge anymore.

Getting used to what the project is
This one mostly is the problem caused by the top managers, managers or anyone else who somehow has power over the project and usually don't have any development duty ... These guys look and check the software all the time, and as they get used to it, they try to make some changes again. Funny, no? They never let the software gets finalized, because while development team tries to close the tasks to complete the current version, they get used to the current version and want some new changes and features.

User/System requirements
Having no exact user or system requirements list which both the developer team and the owner of the software have same understanding on the items will cause problem whenever you want to demonstrate a version to the owner or product manager. Defining these requirements is one of the most difficult parts of the software lifecycle. The problem gets more serious when during the development either part tries to modify the requirements, at this time people are usually busy and the project is not anymore fresh, the other part just accept at that time, but when comes to deliver something, the war begins.

Having no deadline or no money problem
If for any reason the project you are working on it has no deadline or the company has no money problem at all, your project is facing to become one of those never ending projects. The reason is obvious, the human being is a perfectionist and if has time, never stops working on the project and if has money never sell the product to market until the software satisfy him, means never.

Product managers with shallow knowledge of software
It is a huge problem if you have a PM who reads specification sheets and brochures and thinks all they write in these papers are correct or even if they are, expects the software team to do the same in short time. The problem gets worse when they forget that these fact sheets or brochures are from big and old companies and yours is just a child one.

Weak marketing
Yes this is a problem and in fact, the reason is simple, marketing can't sell the product and always brings excuses, like we can't compete in the market, then adds new features, a never ending loop.

Sunday, 16 November 2014

Software Evolution

We talked about "last universal ancestor" in one of the posts before, which was the first organism, all of us and other living organisms have diverged from Evolution brings diversity and this diversity is not just at the species level, it goes down to the chemistry of the life too. For example the difference between the human DNA and chimps or plants.

Saturday, 15 November 2014

Human, example of an advanced software program

When your parents tell you, for example, go to the grocery store and get some grocery for the weekend. The instructions or orders they give you to go where, do what and ... is an example of a software or better to say a program that runs on you. Yes, they somehow have the ability to run this program on you and get the result. Weird, no? In fact, you are the hardware which runs your parent's software program.

Mathematics and Physics

They are friends, in my point of view physics is the main reason for mathematics development and progress. Remember the Galilei saying that the book of nature is written in mathematics. I read somewhere one of the important difference between human and other animals is the ability of bringing reason. Yes, reasoning and what language better that mathematics for reasoning.

Monday, 10 November 2014

Hierarchy of sciences - 7, Mathematics and Summary

We discussed how we can describe almost every phenomena in the world with just physics. Although we did not bring an exact proof for this claim, instead tried to proof it with common sense and a little bit of science everybody have nowadays. You need to know that we didn't cover the entire sciences exist, just the most important of them to show that the underlying layer of all sciences is physics.

Sunday, 9 November 2014

Hierarchy of sciences - 6, Sociology

Although it is strange but we saw we can describe human behaviour with physics only. If you say we didn't exactly prove these things, I'll say yes we didn't, we just wanted to give an idea of if it is possible or not. We didn't do it because we don't have time to do such a thing and don't have detail knowledge, in fact it needs a team of scientists to provide an exact proof for this claim and most of the scientists when reach to a degree of knowledge simply feel that this claim is the only way to exactly describe any phenomena.

Thursday, 6 November 2014

Hierarchy of sciences - 5, Psychology

OK, until now we saw that all phenomena in chemistry and biology can be described by physics alone, but in some complex and perhaps longer description manner. To understand these descriptions much easier we need to hide some details and define some new - which I say nonphysical - definitions. These definitions somehow hide physics and create some new science by themselves. And as we saw these abstractions were chemistry and biology by now.

Monday, 3 November 2014

Hierarchy of sciences - 4, Biology and human brain

What is the difference between human brain and an animal brain? I think the most exciting thing about human brain which no other creature is able to do is the ability to deduce or bring reasons. Although there are many other things which scientists think are the difference too, like appreciation of beauty, self-consciousness, morality, understanding of time, love and ... but I don't think animals really have no idea of what these things are. They may barely understand the above-mentioned things like self-consciousness or love, but I'm not sure if we make an accurate measurement system for these definitions we find them zero in animals. We also have to notice the definition itself, what is beauty? We enjoy looking at an art masterpiece, but don't you think a wild animal itself doesn't have more desire to foods that smells better? Doesn't it appreciation?

Sunday, 2 November 2014

Hierarchy of sciences - 3, Biology and animals

Yes, animals. Again we are not going to talk deeply to define what animal is or about the hierarchy of the species,  how they have developed and ... We just want to get a feeling of if they all can be explained just by physics or not? Although both animals and plants are made of cells but their cells are not the same, it is because of the way they both evolved through the time. Surely no animal cell needs to have chloroplasts because they don't need to make their own food; instead, they generally digest food by digestion mechanism they have, and by food, we mean other animals or plants.

Saturday, 1 November 2014

Hierarchy of sciences - 2, Biology and plants

We saw that chemistry can be interpreted as an abstraction over physics. We don't want to talk about all sciences, just some of them which may not look like as physics at first sight, but believe me, all is physics at their core, now let us talk about the biology. Biology is the study of life, and by life, we mean any living organisms. The study can be done on tiny microorganism level, or complex ecosystem consist of different types of organisms, the study can be done on structure, function, and ... for each organism or on the way organisms affect each other or live and evolve in an ecosystem.

Friday, 31 October 2014

Hierarchy of sciences - 1, Chemistry and Physics

I don't want to start a serious argument on if such a thing exists or not. Just want to talk about a model we can have for all sciences to look at them as a single unique science. When we speak of science, most of us are usually think about physics and chemistry? Forget about the chemistry for a moment, let's talk about the physics.

Thursday, 30 October 2014

Why Physics

I remember I was looking at one of the Professor Richard Wolfson's courses, I don't remember the exact words but the core of his saying was that "physics is the study of motion". If you think about this in depth definition, you'll find you can explain everything with this.  You may say, you've missed the Matter, I say matter if just an abstraction over small moving particles. Then if you say, OK what the about those small particles, I'll say the mass itself is something that comes from motion.


Why Sleptons? No particular reason, just a name perhaps related to the blog and one of my personal interests of study, Quantum Physics.