Wednesday, November 10, 2010

Working with Active Directory using C#

I am writing this post to all of you looking for the sample to work with Active directory services with various operations using C#. In this article, I would like to explain the below operations with Active Directory.

Operations:



  1. Create User
  2. Create Group
  3. Add User to Group
  4. Create user and add to Group
  5. Disable User
  6. Enable User
  7. Remove User from Group
  8. Remove Group
  9. Remove User


Sample Code:

using System;
using System.DirectoryServices.AccountManagement;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;

namespace Aryabhatt.Samples.ActiveDirectory
{
    internal class AccountManagementService
    {
        // AD Domain Name for connecting through LDAP
        static string adDomain = ConfigurationManager.AppSettings["DomainName"];
        // User information like (OU)
        static string adContainer = ConfigurationManager.AppSettings[Constants.ConfigKeys.AD_CONTAINER];
        // Group information like (OU)
        static string adGroupContainer = ConfigurationManager.AppSettings[Constants.ConfigKeys.AD_GROUP_CONTAINER];

        // Service user name
        static string adminUser = ConfigurationManager.AppSettings[Constants.ConfigKeys.AD_SERVICE_USERNAME];
        // Service password
        static string adminPassword = ConfigurationManager.AppSettings[Constants.ConfigKeys.AD_SERVICE_PASSWORD];

        // AD LDS or AD user context
        static PrincipalContext adPrincipalContext = new PrincipalContext(
                                                                          ContextType.Domain,
                                                                          adDomain,
                                                                          adContainer,
                                                                          ContextOptions.Negotiate | ContextOptions.Sealing | ContextOptions.Signing,
                                                                          adminUser,
                                                                          adminPassword);

        /// <summary>
        /// Authenticates the user with the credentials against Active Directory
        /// </summary>
        /// <param name="userName">User name</param>
        /// <param name="password">Password</param>
        public static void ValidateUserCredentials(string userName, string password)
        {
            PrincipalContext principalContext =
                new PrincipalContext(
                    ContextType.ApplicationDirectory,
                    adDomain,
                    adContainer);
            return principalContext.ValidateCredentials(userName, password);
        }

        /// <summary>
        /// Checks if the provided userName already exists in the Active Directory. Returns True if exists.
        /// </summary>
        /// <param name="userName">User Name</param>
        /// <returns>Returns true if the user exists in AD otherwise false</returns>
        internal static bool IsUserExist(string userName)
        {
            bool userExists = true;

            try
            {
                using (UserPrincipal user = new UserPrincipal(adPrincipalContext))
                {
                    user.Name = userName;

                    // create a principal searcher for running a search operation
                    using (PrincipalSearcher principalSearcher = new PrincipalSearcher())
                    {
                        // assign the query filter property for the principal object
                        principalSearcher.QueryFilter = user;
                        // run the query
                        using (Principal result = principalSearcher.FindOne())
                        {
                            if (result == null)
                            {
                                userExists = false;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY);
                // Not rethrowing here as AppException being thrown on the caller
            }
            return userExists;

        }

        /// <summary>
        /// Returns UserProfile object for the passed userName
        /// </summary>
        /// <param name="userName">userName</param>
        /// <returns></returns>
        private static UserPrincipal GetUserPrincipal(string userName)
        {
            UserPrincipal user = new UserPrincipal(adPrincipalContext);
            user.Name = userName;
            UserPrincipal userPrincipalResult;
            using (PrincipalSearcher principalSearcher = new PrincipalSearcher(user))
            {
                userPrincipalResult = (UserPrincipal)principalSearcher.FindOne();
            }
            user.Dispose();
            return userPrincipalResult;
        }

        /// <summary>
        /// Returns GroupPrincipal object based on the groupName passed
        /// </summary>
        /// <param name="groupName">Group Name</param>
        /// <param name="adGroupContainer">AD Group container</param>
        /// <returns></returns>
        private static GroupPrincipal GetGroupPrincipal(string groupName, string adGroupContainer)
        {
            GroupPrincipal groupPrincipalResult;


            // AD LDS or AD group context
            PrincipalContext adGroupPrincipalContext = new PrincipalContext(
                                                              ContextType.Domain,
                                                              adDomain,
                                                              adGroupContainer,
                                                              ContextOptions.Negotiate | ContextOptions.Sealing | ContextOptions.Signing,
                                                              adminUser,
                                                              adminPassword);

            GroupPrincipal group = new GroupPrincipal(adGroupPrincipalContext);
            using (group)
            {
                group.Name = groupName;

                using (PrincipalSearcher principalSearcher = new PrincipalSearcher(group))
                {
                    groupPrincipalResult = (GroupPrincipal)principalSearcher.FindOne();
                }
            }
            return groupPrincipalResult;
        }

        /// <summary>
        /// Creates an active directory user account
        /// </summary>
        /// <param name="userName">User name</param>
        /// <param name="password">Password</param>
        /// <param name="firstName">First name</param>
        /// <param name="lastName">Last name</param>
        /// <param name="emailAddress">Email address</param>
        public static void CreateUser(string userName, string password, string firstName, string lastName, string emailAddress)
        {
            if (IsUserExist(userName))
                throw new ApplicationException(Constants.ExceptionMessages.USER_EXISTS);

            try
            {
                // create a user principal, set their password and enable the account
                using (UserPrincipal user = new UserPrincipal(adPrincipalContext, userName, password, true))
                {
                    // assign some properties to the user principal
                    user.GivenName = firstName;
                    user.Surname = lastName;
                    user.EmailAddress = emailAddress;
                    if (!userName.Contains("@"))
                        user.UserPrincipalName = string.Format("{0}@{1}", userName, adDomain); // Setting up UPN value

                    user.Save();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Deletes the user from AD Domain
        /// </summary>
        /// <param name="userName"></param>
        public static void RemoveUser(string userName)
        {
            try
            {
                using (UserPrincipal user = GetUserPrincipal(userName))
                {
                    user.Delete();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Adds user to a Group
        /// </summary>
        /// <param name="userName">User name</param>
        /// <param name="groupName">Group name</param>
        public static void AddUserToGroup(string userName, string groupName, string adGroupContainer)
        {
            try
            {
                using (UserPrincipal user = GetUserPrincipal(userName))
                {
                    using (GroupPrincipal group = GetGroupPrincipal(groupName, adGroupContainer))
                    {
                        group.Members.Add(user);
                        group.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Adds user to a Group
        /// </summary>
        /// <param name="userName">User name</param>
        /// <param name="groupName">Group name</param>
        public static void CreateUserAndAddToGroup(string userName, string password, string firstName, string lastName, string emailAddress, string groupName, string adGroupContainer)
        {
            if (IsUserExist(userName))
                throw new ApplicationException(Constants.ExceptionMessages.USER_EXISTS);

            try
            {
                // create a user principal, set their password and enable the account

                UserPrincipal user = new UserPrincipal(adPrincipalContext, userName, password, true);
                using (user)
                {
                    // assign some properties to the user principal
                    user.GivenName = firstName;
                    user.Surname = lastName;
                    user.EmailAddress = emailAddress;
                    if (!userName.Contains("@"))
                        user.UserPrincipalName = string.Format("{0}@{1}", userName, adDomain); // Setting up UPN value
                    user.Save();

                    GroupPrincipal group = GetGroupPrincipal(groupName, adGroupContainer);// GroupPrincipal.FindByIdentity(adGroupPrincipalContext, groupName);
                    using (group)
                    {
                        group.Members.Add(user);
                        group.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Removes user from a group
        /// </summary>
        /// <param name="userName">User name</param>
        /// <param name="groupName">Group name</param>
        public static void RemoveUserFromGroup(string userName, string groupName, string adGroupContainer)
        {
            try
            {
                using (UserPrincipal user = GetUserPrincipal(userName))
                {
                    using (GroupPrincipal group = GetGroupPrincipal(groupName, adGroupContainer))
                    {
                        bool isDeleted = group.Members.Remove(user);
                        group.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Activates the user
        /// </summary>
        /// <param name="userName">User name</param>
        public static void ActivateUser(string userName)
        {
            try
            {
                using(UserPrincipal user = GetUserPrincipal(userName))
                {
                    user.Enabled = true;
                    user.Save();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Disables the user from Domain
        /// </summary>
        /// <param name="userName">User name</param>
        public static void DisableUser(string userName)
        {
            try
            {
                using (UserPrincipal user = GetUserPrincipal(userName))
                {
                    user.Enabled = false;
                    user.Save();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Creates the group in AD
        /// </summary>
        /// <param name="groupName"></param>
        public static void CreateGroup(string groupName)
        {
            try
            {
                // create a group
                GroupPrincipal group = new GroupPrincipal(adGroupPrincipalContext, groupName);
                using (group)
                {
                    group.Save();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }

        /// <summary>
        /// Removes the group from AD
        /// </summary>
        /// <param name="groupName"></param>
        public static void RemoveGroup(string groupName, string adGroupContainer)
        {
            try
            {
                // fetching a group
                using (GroupPrincipal group = GetGroupPrincipal(groupName, adGroupContainer))
                {
                    group.Delete();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, Constants.Policies.SERVICE_BOUNDARY))
                    throw ex;
            }
        }
    }
}

Web.Config Entries:

<add key="DomainName" value="Dev.Arybhatt.com" />


<add key="UserName" value="ServiceAdmin" />


<add key="Password" value="P@ssw0rd1" />


<add key="UserContainer" value="OU=DevUsers,DC=Dev,DC=Arybhatt,DC=com" />


<add key="GroupContainer" value="OU=Demo,OU=Apps,DC=Dev,DC=Arybhatt,DC=com" />



Organizational Unit: An organizational unit (OU) is a subdivision within an Active Directory into which you can place users, groups, computers, and other organizational units. You can create organizational units to mirror your organization's functional or business structure. Each domain can implement its own organizational unit hierarchy. If your organization contains several domains, you can create organizational unit structures in each domain that are independent of the structures in the other domains.


User Principal : User principal object can contain only the users in the OU.
Group Principal: Group principal object can contain only the groups in the OU.
Domain Name: Domain name


Hope you got to know how simple it is. :)


Regards
Gangadhar Kotu




Thursday, August 12, 2010

Telugu Rhymes for Children

http://www.youtube.com/watch?v=SAJcdLa4fws

Wednesday, December 9, 2009

MOSS Governance considerations

Here are some of my key deployment considerations to governance & management.

  • Quota - to encourage storage management, if not manage your disk space and search relevancy
  • Usage Policies - what is ok, SharePoint Designer, Custom web parts, SQL data sources in dataviews, what types of sites do you provision, who can own a site?
  • Data/Site Retention policies - How long does data that isn't accessed or categorized or even used for a couple of years stick around?
  • Web Part/Development policies - Ownership, support, deployment?
  • Meta Data Capture & Content Types - How can you get the best data out of your users?
  • Managed Approach to deployment (top down) - What is our enterprise search story, what is our browse, site map and site directory story... What do the departments in my company use for aggregation?
  • Self Service approach to deployment (bottoms up) - how can I keep Help desk from being a bottleneck to information worker productivity
  • Montoring Plan - Is there a 24/7 plan with a MOM console? What application packs or web services verifications and synthetic transactions for verifiying uptime.
  • Global Considerations - Shared Services, WAN and end user performance levels, enteprise search considerations
  • Cost Model or Charge Back Model for recapture of IT Costs - who pays for all this?
    Solutions Deployment packaging best practices and rules to live by - How can we consistently deploy web parts, site definition changes
  • Branding - how can we consistently have a good experience for our end users and keep the sense of company ownership
  • Stakeholder and ownership - who should be involved in these decisions
  • SSP Delegation models - Who owns Search and relevancy (best bets), who owns the profiles (company directory), who owns the BDC (business data catalog) connections to our SAP, who get's safe locations for Excel published charts, spreadsheets
  • Operational & Service SLAs -
    Backup and Restore/Recovery & Business Continuance SLAs
    Uptime
    Downtime windows
    Performance SLAs
  • Communications plan - who do we communicate to, when and how often and what? Is there a Communications website where we communicate this list of info?
  • End User Education Plan - Is there an FAQ, training materials, brown bags, web sites?

I recommend going through this list, and adding more of your own, then building a governance worksheet or "Green book" that helps bring the stakeholders together.

~ Gangadhar Kotu

Features of MOSS 2010

SharePoint 2010 is the business collaboration platform for the Enterprise and the web that enables you to contact and empower people through an integrated set of rich features. SharePoint 2010 helps you cut costs with a unified infrustructure while allowing you to rapidly respond to business needs.
Features of the new SharePoint 2010
  • New User Interface including the new Ribbon - A streamlined new user interface including the Ribbon is an intuitive and contextual web user interface that makes users more effective. reduces training, provides better performance and lowers cost.
  • Web Edit - Web Edit allows users to easily customize a site, making it possible to respond more quickly than ever to changes in your dynamic business environment.
  • Silverlight Web Part - The Silverlight Web Part allows you to fully integrate Silverlight applications within your SharePoint site for a more interactive user experience.
  • Rich Theming - Combined with Web Edit, rich theming allows you to skin your SharePoint site using your favorite office client themes. Change the colors and fonts to customize just as you like it.
  • Multiple Browser Support - SharePoint 2010 will now support not only MS Internet Explorer, but now FireFox and Safari will also be fully supported.
  • Visio Services - Visio will now be fully supported. You can link diagrams in real time, with high-fidelity in a consistant matter so that everyone can stay up to dat. Even those who do not have Visio.
  • New SharePoint Designer - SharePoint Designer comes with a new User Interface with enhanced modeling capabilities and improved workflows.
  • Business Connectivity Services (The Business Data Catalog) - Business Connectivity Services (BCS) allows you to connect to Line-of-business applications, web services and databases in a user friendly way enabling users to interact and update it easily in both web and office clients.
  • SharePoint Workspace - Formally named Groove, SharePoint Workspace is a rich client for SharePoint that lets you take your SharePoint lists and libraries off-line, including the ability to update content and sync it back when you re-connect.
  • Rich Media Support - Silverlight and PowerPoint presentation capabilities are easily integrated with the new SharePoint 2010. Your information and presentations will come to life in new and dynamic ways with ShjarePoint 2010.

Friday, December 4, 2009

What The World’s Greatest Managers Do Differently

Based on a mammoth research study conducted by the Gallup Organization involving 80,000 managers across different industries, this book explores the challenge of many companies - attaining, keeping and measuring employee satisfaction. Discover how great managers attract, hire, focus, and keep their most talented employees!

Key Ideas:

  1. The best managers reject conventional wisdom.
  2. The best managers treat every employee as an individual.
  3. The best managers never try to fix weaknesses; instead they focus on strengths and talent.
  4. The best managers know they are on stage everyday. They know their people are watching every move they make.
  5. Measuring employee satisfaction is vital information for your investors.
  6. People leave their immediate managers, not the companies they work for.
  7. The best managers are those that build a work environment where the employees answer positively to these 12 Questions:
    1. Do I know what is expected of me at work?
    2. Do I have the materials and equipment I need to do my work right?
    3. At work, do I have the opportunity to do what I do best everyday?
    4. In the last seven days, have I received recognition or praise for doing good work?
    5. Does my supervisor or someone at work seem to care about me as a person?
    6. Is there someone at work who encourages my development?
    7. At work, do my opinions seem to count?
    8. Does the mission/purpose of my company make me feel my job is important?
    9. Are my co-workers committed to doing quality work?
    10. Do I have a best friend at work?
    11. In the last six months, has someone at work talked to me about my progress?
    12. This last year, have I had the opportunity at work to learn and grow?
The Gallup study showed that those companies that reflected positive responses to the 12 questions profited more, were more productive as business units, retained more employees per year, and satisfied more customers.

Without satisfying an employee’s basic needs first, a manager can never expect the employee to give stellar performance. The basic needs are: knowing what is expected of the employee at work, giving her the equipment and support to do her work right, and answering her basic questions of self-worth and self-esteem by giving praise for good work and caring about her development as a person.

The great manager mantra is don’t try to put in what was left out; instead draw out what was left in. You must hire for talent, and hone that talent into outstanding performance.

More wisdom in a nutshell from First, Break All the Rules:
  1. Know what can be taught, and what requires a natural talent.
  2. Set the right outcomes, not steps.
  3. Standardize the end but not the means. As long as the means are within the company’s legal boundaries and industry standards, let the employee use his own style to deliver the result or outcome you want.
  4. Motivate by focusing on strengths, not weaknesses.
  5. Casting is important, if an employee is not performing at excellence, maybe she is not cast in the right role.
  6. Every role is noble, respect it enough to hire for talent to match.
  7. A manager must excel in the art of the interview. See if the candidate’s recurring patterns of behavior match the role he is to fulfill.
  8. Ask open-ended questions and let him talk. Listen for specifics.
  9. Find ways to measure, count, and reward outcomes.
  10. Spend time with your best people. Give constant feedback. If you can’t spend an hour every quarter talking to an employee, then you shouldn’t be a manager.
  11. There are many ways of alleviating a problem or non-talent. Devise a support system, find a complementary partner for him, or an alternative role.
  12. Do not promote someone until he reaches his level of incompetence; simply offer bigger rewards within the same range of his work. It is better to have an excellent highly paid waitress or bartender on your team than promote him or her to a poor starting-level bar manager.
  13. Some homework to do: Study the best managers in the company and revise training to incorporate what they know. Send your talented people to learn new skills or knowledge.
  14. Change recruiting practices to hire for talent, revise employee job descriptions and qualifications.

~ Gangadhar Kotu

Wednesday, October 28, 2009

Ways of Appreciation

Any form of appreciation makes a person happy and valued. It gives the impression that the employee is efficient and thus deserves some form of acknowledgement. Appreciation does not wait for time or occasion. Whenever the employee delivers commendable work, a small act of appreciation can be a great boost to their morale.

The most common form of appreciation is through gifts or increments. Gifts like chocolates or something that interests the particular employee can be bequeathed. Cash prizes or coupons can be awarded so that the employee gets some extra income. No matter how small the gift is, it can be the biggest motivating factor.

An appreciation letter can be an asset for any employee. It leverages the career prospects of the employee. It portrays that the employee was very good at his/her task and thus can be regarded as a worthy employee.

A simplistic way of appreciating is saying thank you or praising their efforts. As the employee has contributed whole heartedly for the organization, expressing gratitude for the same makes the employee keep up the good work. Also their names can be displayed on notice boards as performers of the month or week.

If a team effort needs to be appreciated, the whole team can be taken out for a pleasure trip or a small feast. Acknowledging them with claps in front of the whole workforce reinforces their spirit. It also instigates others to perform and receive the same commendation.

An efficacious employee longs to receive opportunities to flourish in his/her trade. Training such employees to be better will guarantee fruition to both the company and the employee.

Every employee requires to be appreciated and the medium of appreciation can vary or can be developed. What is important is that the employees receive his/her due as it can make them feel esteemed and execute quality work.

~ Gangadhar Kotu

Saturday, October 17, 2009

Trip to Kurnool flood victims

Today morning, I had booked the tickets to Kurnool and return too. My bus would start by 9PM from Majestic, Bangalore. We had already purchased the items to be distributed to flood victims near by Kurnool.

** I had spent my Diwali time with flood victims in Kurnool areas by distributing some of the needy items. **

17-Oct-2009 7:15 PM Started from my home to Majestic, the bus took more than an hour. At the end the bus was not moving from Majestic theatre. So took a chance to walk down to Majestic bus stand.
17-Oct-2009 8:35 PM I had met the friends Kumar (Actually Kumar is started a new trust called 'SahayamIndia' to service the public, where ever he can) and Mohan there. So the trip started with the efforts of Kumar only. God bless you Kumar.
17-Oct-2009 9:10 PM Actual Journey has been started and probably by 11PM, the bus has been stopped for dinner and had hot hot Roti and Veg curry at Chikka Ballapur area.
18-Oct 2009 6:00 AM got down at Kurnool and doesn't feel like some flood came there and went to Hotel S.V.Regency (for fresh up). While going to hotel through Auto, we were noticed the mud marks on the walls. We were inquired Auto driver (didn't ask his name) about the situation. He was explaining us like "there are areas where the water has come till mid of third floor". We met Mr. Mallikarjun (NGO, from SERUDS, Kurnool) at Hotel and asked us to get ready by 8:00 AM - 8:30 AM. Other friend (Murali) also joined us by 7:15 AM.
18-Oct 2009 8:50 AM, Had a good and nice break fast at Hotel Amaravathi deluxe, which quite opposite to Hotel S.V.Regency.

Post break-fast, we were going by Auto to SERUDS office and kind of struck in traffic jam (also traffic police was present). The traffic jam was because of about more than 50 tractors (>50) were lined up at Agricultural Market Committee Yard. I had inquire with Auto driver (Mr. Reddy) and got to know that they are clearing up all the mud piled up in the yard up to 2 feet.

Yes, we had reached SERUDS office (Location Budhavara Peta)
SERUDS and below is the team namely Kumar Mukkala (Founder of Sahayam India), Gangadhar Kotu, Mohan Vayyala, Muralidhar Reddy. The house almost dried up but no roofAlso checked the stock of items (200kgs of Rice, 100 kgs of Dal, 100 litres of Refined Sunflower Oil, 200 bath soaps, 200 washing soaps).

After 15-20 mins, we wore masks as going to all flood effected areas as a precaution. We have started the camp from here. The following is the map of what areas we had visited.
******* Map image
a. Have been to Mala giri and met the people there. Understood that they have lost everything and some of the houses are not in a position to enter in. Power was still an issue in the houses here. They are getting power only during the day time and no power during night times as the house walls are still wet.
NGO explaining the situation to our Team


b. Have been to Madhiga giri and met the people there. Here there is no big loss to the houses as almost all are buildings.
The house almost dried up but no roof
The areas a &b got flooded with water almost 35-40 feets height and people used small boats to go to the better places. In both the areas the people are daily wages couple of days back. But now, they are workless, homeless, foodless and even hopeless for some days as no one are visiting them and giving a hope. No govt officials are visiting them.
c. Have been to One town and people are still showing the flood marking points.
The house almost dried up but no roof
d. Have been to Kummara veedhi and observed that the Muncipal employees are now trying to clear off the mud from the places. In some of the streets, water was still there which was not even floating. We were observed that they are still cleaning up the bowls (which still had mud...). The area got flooded with water almost 20-25 feets height.
Mud in the placesStill water in the roadsCleaning up the bowls
e. While going towards to Jammi Chettu centre, we have observed that the school was complely with the mud and no one is clearing them. A small picture was taken there and also can be observed the car, books (including Khuran) left unattended.
Muslim SchoolThe house almost dried up but no roofMuslim booksCar in the mud
We just move forward to see how the Tungabadra and Handri rivers were sweeped off the areas. While on the way, my god, it was horrible, we were seeing in TV channels only but upfront here. There was a lorry of goods to be distributed and people are rounded around the lorry and rised up their hands to catch which ever can hold. And the people in the lorry are throwing items (rice, dal, water, ashirwad atta,....) over the air. Somebody are getting them because they are jump and catch them. Some of the goods are ground touched and there are people to even get them.
The house almost dried up but no roofThe house almost dried up but no roof
The following click would give you a real-time feel, who is even trying to get those ground touched food grains.
The house almost dried up but no roof
There was some worse here, somebody scolding her not to pick that grains. But how does the others knows what kind of hungry they are in. Heart touching .. huh?
The following picture shows you what was the level of flood in the river area. You can observe the dry rice leaves (వరి చెత్త) are hanging to the power lines (main grid lines).
The house almost dried up but no roof
You can also observe there are lots of rice bags (wet in flood water) which got wasted during the time.
The house almost dried up but no roof
The following is the cinema hall in that area.
The house almost dried up but no roof
While moving towards Adarsh Nagar/ near by Chanakya puri, I felt like more thirsty and drunk water. We went to Adarsh Nagar (earlier it was posh area) and understood that almost all the houses are getting vacated and moved to other areas even though less affected with the flood (kind of 8feets height). Luckily because of Dasara holidays, the Montissori School was closed otherwise there would have been a big issue to almost 3000 students.

By now, almost the visiting camp was done and back to SERUDS office. We were started packing the items to be distributed. I felt here like the items would not be sufficient for the people. But we were tried our best to serve atleast to some of the people.

We were actually planned to help 100 people and also distributed the tokens to the people. And were involved in packing the items to each. The items in each packet are 2kg of Rice, 1kg of Dal, 1litre of Refined Sunflower Oil, 2 bath soaps and 2 washing soaps.
The house almost dried up but no roof
Once the packing was done, we all went to Hotel Meenakshi and had nice lunch there.
By the time, we were back to office, there are almost 35-40 people are waiting for us in the sunny area. We just took rest for a minute or two and started distributed the packets. Going on fine.. Rajesh is clicking us here..
The house almost dried up but no roof
One woman came who doesn't have a token (means, she is not from the selected area but affected one), so had asked her to wait for sometime by saying "we would give you if anything left". She was scolding, cursing like why don't you select us (people living after the graveyard area; seems to be no one is going that area) also as we also lost everything. Kind of telugu version of the cursings [అయ్యా, మేము సమాధుల అవతల ఉంటాము. మమ్మల్ని ఒక్కడన్నా పట్టించుకోని చావడం లేదు. కనీసం మీరైనా పట్టించుకోండి. ఏఁ మీరైనా పట్టించుకోని చావచ్చు కదా! మాకు ఇవ్వకుండా మీరేమి బాగు పడతారులే? ]
People are coming.. and collecting, ....... coming.. coming & collecting .... ....

In between, there were other 5 women (inlcuding old aged [75-80] beggar) of same kind who doesn't have tokens. We sent 2 of them returned to get the tokens. We were sure that we could really give them but like to wait till all the token holders are collected. But they were not even ready to wait till that time. I personally convinced them to wait for sometime, ofcourse the other woman was waiting since 90 mins to 120 mins time, she had rised up like anything.. you will be destroyed, not get anything... OH MY GOD.. lots of cursings even for the good work (మీరు బాగుపడరు, మీరు నాశనమై పోతారు, ...). We understood her angryness, hunger feel and not to consider her cursings but helped our best with other victims.
4:30 PM, There was no point of waiting for other token holders and given 4 packets to these non-token holders. Still 4 more packets are pending for distribution. We had asked Akshay (attender) to distribute them to other token holders.
4:40 PM, Left from office to Konda Reddy Buruju (the fort from '' movie), Right behind, there was a Police Parade ground (below picture), which was completely gone with the flood.
Police Parade grounds, SP Office
5:10 PM, Went to Tungabadra river. The house almost dried up but no roofThe house almost dried up but no roofCross by, we also a look at ex MLA 'T.G.Venkatesh' house. It was not a house but a modernized fort. It was just on the bank of the river. Even his whole house was filled with flood water. If you see the area outside his house, all are occupied with thick mud of almost 3/4 feet height, which was still unattended and disgusting smell.

I was always being involved in a Public Relation matters (not only here, I did the same when I went to Kakinada fisher men place to distribute general medicine to them in Mar'2005). I was more happy to directly meet the victims and help them with my hands.
I am also in the plans of starting a charitable trust (the name would be "Sanjit Ram Kotu Charitable Trust") to help the poor people, old age people, ....

Happy Service. Serve the needy people. !!

~ Gangadhar Kotu