Wednesday, November 30, 2005

Software and Freedom

Free Software Foundation vehemently supports free use and distribution of software. It is some thing like you get a good code you can share it with your neighbour. Once can't deny the role FSF and Open software has played in computing industry.

The freedom as proposed by fsf has a slight glitch. The code may be free to use but not easy. Let us take freedom in political domain. In all modern democracies freedom of people are ensured by rights and a right of expression is mentioned which is like a core, a base around which other freedoms rest. That is why importance to journalism is given even though it has no formal role in constitution. So is our software.

Let me explain. How many times have you [I am talking to Linux users] cursed your machine for not able to do something in your work, do you hate working on a console the whole day? The point is it comes free you can always download source of anything from net change it and start using it but the trouble in changing. Look at the amount of documentation, forums which one has to consult to.

It reminds me one of the Franz Kafka's short stories [which are extremely metaphorical]where a man always came for justice on door of law and the gaurd always refused him to go in. When the man was about to die gaurd told him you never went in the gate was made for you only.

So we have created free software but you have to be a geek or a coding god to understand and create your own stuff. My basic premise is software or code is software usage is an act of expression so whenever I tell this windows to do something someone has thought over and made windows such that it would be nice for me. But the glitch is that how could he think about all the possible needs of me. In such a diverse world with myriads of requirements who would go on making software for others.

We should create platforms where the user has more control over the system not in terms of open ness but ease of use also. Freedom needs its own enablers and checks and balances as well.

Thursday, November 17, 2005

K era

That K in title is not for Kyonki Chhaachh bhi kabhi dhahi thee. But for Knowledge With a capital and silent K.

It is a Knowledge economy. Global economy. Religion can be seen as having a source of knowledge.It can be the secret knowledge of the unknown [paradoxical hunhh], the right way of living, secrets and history of cosmos, or ethics. Common things about religion is the interpreters of knowledge or the gate holders of heaven, the learned people who bring common men, the lesser mortals in contact with divinity, supremity. They are agents of ascent.

But knowledge economy starting from printing press threw them off-gaurd. It brought that withhold virgin of knowledge to common man. Who can learn, read, discuss religion as they like. The role of the interpreter, the gatekeeper reduced to a peon. Now the same knowledge economy is going through a rift. Knowledge which was thought as free (so was water once) is a capital which has its own Capitalists.

There has been a fundamental shift in power or perception of power. It has moved from Land [Agriculture], Resources [Feudalism], Capital [Industrialization], Access or Control [ Post modern- Management Era where managers have control over other people's money]over cash to Access or Control of Knowledge. The line between last 2 is still blur.

Well coming back to knowledge pundits, the people who sit over vast heap of knowledge patent and IP protection is one of the things they have created to withhold knowledge.

PS: The word knowledge above is still a little bit blurry to me and i am sure even to knowledge manager and knowledge workers....

Wednesday, September 28, 2005

Binary Files

Binary files are bytes or streams of 0s and 1s which computer's hardware can understand. On the other end we have source code which is series of literals and enlish like keywords which are "human understandable". Source code is a set of instructions intended to achieve some desired goal/objective/functionality. These two broadly are the two ends of spectrum of software industry.

Terminology may differ. People in OOP would make source files and class file representing them but the fact remains same. Machines and humans dont understand each other's langauge. Part of the reason the situation remains same is architecture of computing machines taken. When they where made machines where thought of as number crunching monsters. So there hardware was designed so as to compute addition, multiplication and all the logical stuff needed. Then from computing we moved to word processing and office automation which thpugh required totally different features. These features where mapped on the same hardware and general purpose machines where made. This is a separate topic of discussion. Lets not move in hardware lets just talk about the SOFTware.

Language incompatibility amongst machines and humans led to creation of this spectrum. Human readable source code on one side and machine readable binary on otherside. Source code in all its essence represents human will which gets translated in machine instructions. What happens in between? If i am the master and computer is the slave then why do i need big big companies to make my PC understand what i want to do.


Software in real life would be flexible to allow user to express her/his whims and fancies. The way we currently do it is that binary would read from a file/setting/property and change its behaviour. If you want to change "behaviour" of a program then either we have to change the "settings" somewhere which the binary would read and determine what to do. Notice that the binary is to check the values in setting and perform some action. Now behaviour of binary hasn't changed.

Wednesday, September 14, 2005

Next Best Thing

Wondering for the next killer app, the next breakthrough. Gazing through crystal ball for whether Microsoft will still be there in future and world would still use the same computer languages (Only if "computers" exist then)

Let me take a guess. First one observation. Please look at the keywords "computer languages". Why is it a language? It is an expression of desire from a user to be fulfilled by the machine.

What model current industry follows is that through market research or direct customer interaction and various inputs from resources people develop a software for a user.

The programmer made it as a "source code" i.e. human readable instructions which aim to achieve a goal. Now the typical software would encompass all the scenarios, environments, situations that a user can present and various actions it can do with the software and make the software according to that. So the user has no control.

If user wants to modify or change the software then he/she has to either get it recompiled or developer has provided options, menus, configuration files which will change softwares behaviour. What Free Software Foundation thought that it should be completely FREE and open to change. FSF though has brought a large shift in computing industry (in some other unintented ways) but it did not become the killer app.

What future requires is expression of thought and desire of the human. It can be in GUI by which I dont have to type may be i could write by just waving my hands in air or some wierdo thing. It can be in terms of logic programming where programmer only tells what is to be done not how. It can be a break through in GUI wherein I dont have to write in a linear fashion within a box.

We have studied generations of computers but not generations of users. Nowadays users have become sophisticated. You can expect some level of familiarity with computers. As Alvin Toffler envisioned in Third Wave we would be having prosumer. The line between a producer who creates a product for a consumer and they interact through an entity/interface known as market would blurr. Soon people would be programming themselves.

Now here take a word of caution. They would not be writing complex piece of software in C, Java or some other shit then compiling it and loading them but then software itself would be highly configurable and better languages would develop to express user's desire

In our technical jargons and mumbo jumbo we have forgot that computers are means to an end not the end in themselves.

Friday, September 02, 2005

Magic and Science

Magic and Science always seem opposite things. Magic is wonderful and unexplainable whereas basis of science itself is explanation. An explanation which is universal can be understood by anyone. But fundamentally they are same in one point that is wonder. Good magic and good science are always wonderfull to look at. The new age has denied both. If I tell you that soon we would be all mechanic zombies with infinite computing capabilities embedded in our neural systems then you would think ya ya ya it is possible. Magic inherently is science and vice versa. What looks magic to one has a science behind it. Remember all the great magicians where great intellectuals, had high IQs and where really intelligent.

That magic has gone out of technology domain. Where if you see a moving train on a huge screen you would run for your life. That awe for the unexplained as dimmed. May be it is because we have lost our curiosity. The scietific zeal. How many of us think how are things made how are things done? When science has entered electronic domain our experience of technology the internals, the dynamic has been remote.

To be more clear let us take example of mechanics and electronic/software. Engineering itself comes from wod engine. In my discussion it would mean a system not necessary and "engine" or a tangible machine but a system which has various components which is designed and implemented to fulfill a particulare requirement or desire.

In mechanical engineering you can visualize that if you pull this gear it will pull this part,this part will rotate and so this part would move by this amount. Your imagination and visualization depends on everyday experience. In software and even in hardware it becomes increasingly abstract and remote. It is always very difficulto to explain the software "design" and "architecture". How can you explain a server "running" and client listening . How do you explain or visualize what software does. The mental image that you make may not be necessarily the same the other guy makes.

One way is software documentation where by words and diagrams one tries to explain and "represent" various parts, connections, behaviour of software. The other is sorce code. It is the human readable form of actual thing that runs on machine. But increasingly we need better mechanisms to represent them. What a function does and how does it achieve this. We should move out of the standard documents in a hierarchical folder concept.

Crazy Idea: We can simulate a physical thing i.e. a machine, physical set up by software can we simulate another software using a software ?

Wednesday, August 31, 2005

Pappu

Ever heard of words like pappu, baburao, chhotu, tumhara chhotu. If you hear these terms from a group containing males that too of north indian variety then rest assured it refers not to a neghbour kiddo but you know what - the male organ.

I was wondering why is it that penis is sometimes treated as mental self image of male body. As if the sole purpose of male anatomy is embedded in it.

Second observation was about the four lettered word. In hindi as well as english sometimes it is used not only for sexual intercourse but other fateful events in ones life. Like "I got f***ed", "I f***ed him (even though i didnt f***ed him!!)"

Why is f***ing treated as an act of subverting someone or suppresing some one. Is it really related to human anatomy that physically a femal cannot rape a man (never heard of the reverse)? Is it purely cultural dominance of male gender?

Why are sexual terms, reference to private parts (non reproductive parts) and incestual remarks are used in curses and abuses?

Monday, August 22, 2005

Software Documentation

Why do we do documentation?Various answers may be to have a formal approach, to keep track of changes, to describe software creation process and to describe the software itself.
The basic necessity is knowledge sharing between different individuals across space and time. The documentation creator and consumer can access it at different times and across different spaces the information needs to be formalized and concretize.

But why should we follow template based files stored in hierarchical folder system. The ultimate requirement is "knowledge transfer" from "knowledge creator" to "knowledge consumer". Why not look at the least noisy and most compressed form of communication in this process? Or infact a data code with an interface surrounding it, which will answer various aspects of documentation (this idea came because if I have ot search a particular aspect of a doc i have to search the whole doc manualy or put a text search)
Why not model the software as a 3-D object which a viewer can manipulate and see how twisting one module strains and effects other modules. This can help in visualization and deeper insight into the software rather than a 2-D diagram followed by loads of text to support it.

Why cant it all be done using diagrams, movies and sounds?

Sunday, July 31, 2005

Digital Revolution

Revolutions come when the thesis of ruling paradigm creates its own antithesis. Marx predicted that the very thing which constitutes capitalism will lead to its downfall. Though it didnt happen Marx was really right in the way revolutions occur.
So is the case of digital computing or computing in a "discrete" "digital" manner. The inherent discreteness in its nature the clear cut division of 0 and 1. The logic crispness of if then else tends to limit it. Though modern dey computers are good number crunching machines and bear there lineage to Turing's machine and Neumann architecture the need for today is not number crunching but networking, data analysis(much more than statistical analysis), AI etc.
(To be continued)

Monday, July 25, 2005

Software Engineering and Religion

I had a course on software engineering where different life cycle models, stages of a software creation process is given. Different processes and methods are given to manage the process. When i had a similar session in the company it said that these things should be a second nature to you not a checklist or laws to be followed to the word each and every time.
So i think is religion it is a set or collection of principles rules general rule of thumb which are not "that" sacrosanct to be not to violated. They are "GUIDE"lines which can be broken in cases.
It is when we concretize these knowledge wisdom that we create laws as a bar beyond which one cannot fall. This let people to fall to the common level so as to be on the safer side.

We all cry about public conduct of indians and our habits. Can these be encompassed in law? Can we really encompass ethics, morality, intent within concrete and crisp definitions of law. NO

Law as a father to the truant child can work in extreme cases who will provide the solace that things dont get out of hand but what will happen when things are not in an emergency state but the soceity is slowly degrading without anybody noticing. This same problem comes in the form of cinema censorship, ip copyrrights.
I think it needs mother of ethics and culture.
-----------------------------------------------------------------------------------------------
Following is another related article written by me which could not get published, Though similar thoughts are given do read it whole:

What exactly is religion? One of the many perspectives is belief in and reverence for a supernatural power. But hardly anybody sees miracles (except some movies) in this life. Alternate view of religion could be a way of life which prescribes some do's and dont's so as to create individual and social harmony. They are principles, guides to be followed so that society doesn't go astray.

Religion is belief on what has been written in sacred text, spoken by great leaders for humans to follow for happiness of all. So is software engineering.

Let me clarify my point. You may differ in it in many ways.Let us identify both of there domains. Both of them tend to be dogmatic i.e. they will preach about practises which would best result in work or life. Both of them have a connection to source of knowledge, priests in religion and software engineering (SE) practitioners who would reveal sacred secrets of the field.

Now comes my main point. Religion and SE are both guidelines, heuristics, thumbrules or synthesis of knowledge that great people have made and told to lesser mortals. You can use them in case they are helpful but those are not absolute truths. You should have a pragmatic approach and look for yourself wether you are being benefitted by them rather than blindly following them.

They should be like second nature to you.

PS: Matters of religion are quite touchy these are my personal views and you can always differ with them

Thursday, July 21, 2005

We look at the software creation process and analyze it from starting by requirement analysis. We look at what the software has to do but we dont look at the process of computing as such. Probably it is from the evolution of computing for calculating. Computers where started as number crunching machines. But nowadays who uses it for pure number crunching we have concepts like logic programming where the user/programmer gives/states the problem not how to solve it. Why not apply it on the machine level?
Why not have machines which dont processon numbers like 0/1 but on symbols? That way the whole basics of computing will change . To bring a revolution we have to identify the underlying conflicts and provide newer solutions? Question everything. What was best 10 year back may not be the best today. We chose binary system because it is easy to identify two levels of electronic signals. We chose 0 and 1 so that we can do complex mathematics in series of small steps. But why do we still do it. Why not lookup for alternatives.

Friday, July 15, 2005

Computing creates a different world which is not easily manageable. Why ?
let me be more clear.

We have a raw resources, developers/manufacturer and end -user. Now if i have an object say knife it is really multipurpose for the "end-user". The developer/manufacturer doesnt specify as to how this knife may be used or it can be used for killing only or cutting vegetable only.

The argument software(s/w) companies give is that "knowledge" as to the the "know how" of making a s/w or doing a task by s/w is easily transferable and copyable so they would be out of business if they give there knowledge for free with the product

This is not so with knife. Because one cannot create another knife out of a knife and call it his own.

now let me get back to the origianl statement.
If i give a product to my customer he can push it pull it throw it he can do anything but software is such a "constraint" thing. A software module can be used in only one way. Try seeing software as an object and see the differences.....

Wednesday, April 20, 2005

meaning of meaning

Our notions of meaning is that of dictionary as a list of words and some text related with each word. But these are sentences themselves who are composed of other words. So either they are in a loop or a netoork in which meaning cannot be assigned to an entity in isolation but to network of relationship amongst these words.

Tuesday, April 19, 2005

Blabbering of the cerebrum

Is there an absolute truth an axiom around which things can be implicated or are there a network of words/ideas which collude to make a meaning out of it. Let me take an example of search for a meaning. In a simpler case we search for meanings of words(on a different level we search for meaning of life). We look for words and then there meaning which themselves are words we can go on and on and on would there be an end of it. No. so out of this loop where does meaning arise.

In the case of absolute truth as in mathematics we define an axiom around which we implicate there is no questioning of the axiom. it is always right. Take geomtery we define a point as a figure with no shape, size which has no length or breadth and moving on we define lines, planes etc then implecate there relations.

Saturday, February 19, 2005

Tale of three cities

went ahmedabad baroda and back for GATE. The school had stocious facilities. The exam was supposed to start at 9:30 but we got the ORS sheet at 9:25 only. That too I was the only CS candidate in the whole centre. It was given 10 min late !!!! what man is this supposed to be practise of one of our greatest engineering centers of India.

Tuesday, February 08, 2005

I feel computing in general needs a paradigm shift. We should rethink about what exactly is a computer and computation. All that we think of is bits and bytes but we dont challenge the basic assumptions. Why is that we should have a binary system? Okay some people may say that electronic circuits can work best if there are only two levels/states. But can we do the same thing using different technology may be optical computing???(that is only stuff that came to my mind) Why is necessary to have the same one CPU, input and output device??? Can we create an array of small size somethings with computation going on in each of them and they synchronize somehow so as to give a coherent, meaningful thing. Please dont think i am talking of many CHIPS (I like that word though) working together....

Thursday, February 03, 2005

!!

I was reading a book called 'Sync'. It deals with synchronization amongst animals, insects, brain/heart cells out of disorganized systems. The guy has studied fireflies and gives numerous examples of such stuff. The problem is like there are numerous oscillators(say pendulum or RC-Circuits) and they can start with any charge(phase) with certain affect on each other soon they synchronize like crickets chirping together. There is no central control over the process. Somehow democratically they manage it amongst themselves. But doesnt exist in all the systems.
I could not understand the whole stuff but it said that in general there is a threshold value till which there is anarchy then the order appears. the graph that shows this behaviour reminded me of something.
In another book "Six Degrees: Science of Connected Age" the author dealt with random graphs and how social networks develop. He also showed the within a random graph the connectedness tended to be disordered but after a threshold the behaviour rised to a saturation level exponentially moving upwards but bend downwards.....
Strange and wierd non-linear is the new World gonna be....

Sunday, January 30, 2005

Context Free Grammar

In the context of context free grammar i thought of one thing which may help someone in making a grammar/testing ones own while developing. There are terminal and non terminals in a grammar. we start with a starting non-terminal(S) then apply any of grammatical rules any number of times to it to finally create a string of alphabets with terminals only. eg. S->aAb S->ab will give all those non empty string which have a's followed by equal number of b's.

Now the thing is we can look the other non-Terminals here (A in this case) as representative of the property of the string that we want to produce (equal a's followed by equal b') So what all can we do to maintain this property. add a's and b's before and after the string

Now one can propose the grammar S->A and A->Ab A->aA but it fails in one fact mentioned above (any of the grammar rules any number of times) so if i apply S->Ab 3 times and S->aA 4 times then the numbers dont match. So the rules can be applied in any order and any number of times.

We can imagine so because in context free grammars except for null transistion (A->e e is null string) all other possible rules can only increase the length of unprepared string. And it is a qood visualization technique also it looks like loop invariance i learned in formal program developement course...

Friday, January 28, 2005

Played CounterStrike for the whole day at least I fagged lesser today because of that. Now I can say that I can play okay. Atleast I can kill one or two people in that.

Then "Meri Aatma Jag Gayi" I had to do my BTech Project work. The optimization algorithm was a bit easier as given in CLR. Atleast I could get a hang of it what was going on. The name of algo was simplex i though it was because of some simplicity it should :-) but simplex is some sort of n-dimensional figure obtained by all the points that satisfy all the constraints. In 2-d it may form a polygon

Basically the problem is Combinatorial Auctioning. Insted of auctioning individual items now the auctioneer shows them multiple items and each one of them have to submit "a" price for a subset of items they want. Note that they dont price the items individually but price the set of items they want. Now there are two problems to it. One is given a bidder has some amount of money she/he wants to invest it in ""best"" manner. The other computationally hard task is to determine who the winner is given the bids.

No there are two approaches to the problem 1. Constraint Programming 2. Linear Programming (LP)
After much deliberations I have to follow the second one. Actually a variant of the second one called Mixed Integer Programming (MIP).

Though i have studied MIP a little but how to model our problem as MIP is still foggy
Adios .....

Tuesday, January 18, 2005

Industrial Revolution and Computer Architecture

Integration/Centralization/Concentration was one of the key features of Industrial Revolution (IR). By this term I not only mean changes in methods of production, distribution or economy in general, but the whole change that took in the world view during those times. Alvin Toffler termed it as Second Wave because it was not a single phenomenon or a single independent variable over which other depended.

Nation States, Factories, Corporate Organizations show high degree if concentration activities. Earlier the geography was divided amongst kingdoms which were more or less a power mesh(mess) amongst king and nobles and allegiances of landlords. The control of the powerful diminished with the distance from the power source. Second Wave gave birth to nation state were the control was strictly defined with barb wired or precisely defined geographical areas of a nation, similar laws of a single nation, an integrated economy. A behemoth represented by single entity a monarch/president/prime minister.

Factories where a huge place where all the raw material was "concentrated" for production and then distributed there after. The power structure of corporate was clearly defined in a central head/group with clear cut heirarchical roles.

We can find few analogies in Computer Architecure as well. What we have as a computer is a three stage device Input/Processing/ Output. For processing we have a microprocessor or a Central Processing Unit. where all the inputs are concentrated to be dealt with.

Although we are now talking of distributed computing where the processing load is distributed but this processing is different from that one. This one is a more higher level of information dealing where in a high level query or a http request may be distributed. But it seems more of the same we have lots of CPUs distributed over.

The earler devices are "peripherals" or the boundaries of this central scheme. Minial state subjects that are to be kept at the "periphery".

What i want to say is that we have to move to a different type of processing at the most basic level . We have to change our strictly defined views of computation as number crunching or binary jugglery and secondly find computation in different physical processes may be.

We can have a host of devices each a separate entity in itself with minimal, small processing unit and through this decentralized, fragmented network a convergence/meaning should emerge.

I know the last part of this blog is highly vague and absurd but these are jsut my thoughts not a whitepaper..............