Lesson: Never Try to Justify

A a very beautiful story!! about Imam Al-Shafi’ie ..

While Imam Shafi’i was sitting with his students, a maid came to him and said : “O Imam ! how come you fornicate by night and then turn to a preacher by day ?!!”

The students of Imam Shafi’ looked at him waiting for him to deny her claim. The Imam just looked at her and told her :”how much do you want me to pay you (as a wage for that night)?”
His students became so furious; some of them started to yell, others stood up to leave the room.

The Imam told them:”consider me as a date which you eat its good part and then throw away its stone.”
The students didn’t like what he said.

Suddenly, a man came running to the maid telling her:”Your house is on fire and all your children are inside of it!”
All of them, including Ash-Shafi’i, run to the burning house. The Imam entered the house quickly and saved the children.

At that point, the maid confessed with a broken spirit:”the Jewish made me accuse you falsely to ruin your reputation in front of your students”
The students of the Imam looked at him wondering about the reason which stopped him from defending himself in front of them.

Ash-Shafi’I said:”If I had denied the accusation, you would have split into 2 groups : a group which would not believe me and another one which would believe me but would continue to have doubts about me. So, I just wanted to entrust all my affair to Allah!

*Lesson taken from that : when you are falsely accused, never try to justify yourself too much to people no matter how oppressed and wronged you felt. Entrust all your affairs to Allah because HE is The Knower of what is hidden from people..

XPages: Rendered Vs Loaded

Today I observed runtime error in one of my XPage. I investigated later and found that the error is occuring on a custom control which should not be rendered in this scenario. I have several custom controls added on my XPage and display only one custom control based on some condition, so I have computed the rendered property.
Now the question is, if the custom control is not rendered then why it is generating error?
I further investigated properties of the custom control and found there is a property “loaded”.

Rendered: it controls the visibility of the control, i.e., if it is true then the markup for this control will be added in the response.

Loaded: it controls the creation of control, i.e., if it is true then only the control is going to be created else it will not be created.

Coming to my problem, I moved my code from rendered to loaded property and everything is working fine. The custom control is not being created so there is no possibility of execution of any code inside that custom control.

Get list of XPages

Following code will return the list of all XPages available in the specified database:

Share network drive on rdesktop

If you want to share clipboard and map your local drive as server’s network drive, you can do this using rdesktop.

Once you get connected your home directory will be available on the server as network drive.

Lotus Notes and Git

If multiple developers are working on a project it is possible that they do development on their local machine(Lotus Domino server is installed on their local machine). Everybody is working on separate module so they can work independently. After the development is complete we need to merge the changes done by every developer into single nsf file so that we can deploy. We used to make a list of design elements which we have modified/created/deleted during the development process, and based on that list from every developer we do merging. Since we are human, we are bound to make mistakes. This list is created manually so there is a possibility to make mistakes or miss out something. So after merging process all unit tests must be executed to ensure all changes has been merged.

To avoid this mistake and overhead of unit testing again and again, we need to automate this process. Let me tell you how we can automate it and ensure it would not break our application.

  1. Install Git on all developers machines for version controlling. This step is not required but it will help during merging process if some conflict arise. Git will give you list of all design elements which are created/modified/deleted without any error.
  2. There are two possibilities, either Git is installed on all developers machine or it is not installed on some/all of developers machine
    1. If Git is installed on all machines: We can use Git pull request to pull and merge all changes made. If a conflict arise(conflict arise only when if a change is made on same line and same file by two or more developers) Git will ask you how to resolve the conflict. We can select manual resolution to ensure we are not going to lose anything
    2. If Git is not installed:
      1. take ntf from all developers(e.g., app1.ntf, app2.ntf, app3.ntf, …)
      2. Create nsf(app.nsf) from first ntf(app1.ntf) and set up version controlling using Git for it.
      3. By default Git creates a branch and call it “master”. Commit all changes in master branch
      4. Create a new branch “app2″ and switch to this branch
      5. Go to Lotus Notes workspace and replace design of created nsf(app.nsf) with design of next template(app2.ntf). Once design replace is completed, it will automatically export all changes to Git repository.
      6. Commit all changes in current branch
      7. Perform step iii – vi for all templates
      8. Now we have all design changes recorded in Git on separate branches, we just need to merge it. Merge “app2″ branch with “master” branch and commit it, then merge next branch with master.
      9. Once this merging process is complete, open Domino Designer and sync the application with on disk project.
      10. You are done. Nothing more to do.

I explained above how can we use Git in our development environment and it gives us flexibility to work in distributed manner. It do not enforce all of us to use it. If few of us are not comfortable in using it they can easily avoid it without any complexity. If you are new to Git, I recommend you to read this documentation.