Logo

LINUX commands

over 1 year ago | Doel Sengupta: Doel

1)To list all files
ls

2)To list files with file size
ls -lh

3)To go to the end of file
tail -f /root/

4)To edit/create a crontab
crontab -e

5)If the cron job is in different directory add the following in the shell script which

the cron calls
PATH
LD_LIBRARY_PATH

6)To go to the top/end of a long file, type the following while the file is open
1G

7)To change read/write/execute permission of the file
chmod

8)To call website from linux OS
curl`http://abc.com`

9)In shell scripts there should be no spaces between variables and = sign

10)To replace a word, go to the beginning of the word and type
CW

11)To delete a line, press

ESC-key+X




12) If you have the vim editor installed, can try out the following
dd --> to delete a line
yy --> to copy a line
p --> to paste the above
Shift6 --> to go to the beginning of a line
$      --> to go to the end of file


Long road to the ING

over 1 year ago | Jen Ji: Why do i do what i do?

2010 momentum has been building since 2009. Ever since I did not get the lottery for 2010 NYC Half Marathon, that lead me to register the More Magazine half marathon. On an off chance, at a small presentation at work, I got an offer to run the ING free of charge and lottery.

I can’t say it’s always been a dream of mine, because it hasn’t. But life is mysterious in many ways and allows us to grow in ways unimaginable.

Running and training for this marathon has not just built up my physical fitness, (although I’m sad to report that I have not lost ANY weight), but rather it’s been more about mental toughness.

So I’m excited to see how it’ll all play out.

Food and Love

over 1 year ago | Jen Ji: Why do i do what i do?

I’m so humbled and honored to have spent time with my family for my grandpa’s 90th birthday. It’s worth all the time flying to Beijing, only 3 weeks before my marathon. The monkey wrench isn’t what a first-timer marathoner needs but I toughed it out and was rewarded handsomely by the love of family.

Business intelligence for all Cognos 10

over 1 year ago | Abhishek Dharga: Learning and sharing

Cognos 10 BI

IBM Cognos BI provides users with many options to access information. Each
option uses common functions and interfaces. Executives can take IBM Cognos
Active reports offline to keep working while out of the office. Information
consumers and executives can access reports, charts, and other business
intelligence objects using dashboards from IBM Cognos Business Insight. IBM
Cognos Advanced Business Users and Professional Report Authors can use
IBM Cognos Business Insight Advanced to create new IBM Cognos BI objects
and to analyze information from any source and from new perspectives. Users
familiar with office productivity tools can use IBM Cognos Analysis for MS Excel
to blend the power of IBM Cognos BI information with the personal workspace of
Excel. Users on the go can use IBM Cognos Mobile to stay connected to their
IBM Cognos BI information.

Stay connected I am going to expalin each feature in details ......

IBM Cognos 10 Redbook link and new features detail...

over 1 year ago | Abhishek Dharga: Learning and sharing

Face The Truth: IBM Cognos 10 Redbook link and new features detail...: "IBM Cognos 10 RedBook Link to the Book http://www.redbooks.ibm.com/redbooks/pdfs/sg247912.pdf Some of the Feature I like: New dynamic qu..."

IBM Cognos 10 Redbook link and new features details

over 1 year ago | Abhishek Dharga: Learning and sharing

IBM Cognos 10 RedBook
Link to the Book
http://www.redbooks.ibm.com/redbooks/pdfs/sg247912.pdf


Some of the Feature I like:

New dynamic query capability. Optimized caching, in-memory calculations, 3x faster query

Cognos admins can export all system metrics to a RDBMS and then analyze with Business Insight(new Dashboard tool integrated in COgnos 10).

The UI works very well and looks very well thought out.

Allows end user to manage their own login credentials reducing the load on IT.

we should more intensively use upgrade manager

Improved content manager performance through caching and faster olap in memory caching

New external data wizard for Cognos10 Report Studio. A feature that supports and encourages agile development

No more messy javascript to modify prompt object text - they are now modifiable properties in cognos10 (this is the best)

http://ow.ly/i/4UH1




Go! Search looks to be included in #Cognos10.

The Agilists - Facebook Group

over 1 year ago | Lalatendu Das: Interpretations of Technorealism

I have created a Facebook group (what is it?) named 'The Agilists'. As the name suggests, this forum is dedicated to foster collaboration among all agile practitioners (starting with those in my network).

If you are an agile practitioner or just interested to stay tuned, please feel free to join the group by clicking on the below link.
- Join 'The Agilists'

NOTE - Having a Facebook account is a prerequisite.

Cognos 10 -Bussiness Insight

over 1 year ago | Abhishek Dharga: Learning and sharing

Business Insight provides an integrated business intelligence experience for business users. This webbased tool allows you to use IBM Cognos content to build sophisticated interactive dashboards that facilitate collaborative decision making. These dashboards can include traditional business intelligence assets, along with Real Time Monitoring information, TM1 Websheets and CubeViews, as well as external data.

Who will cry when you die by Robin Sharma

over 1 year ago | Niranjan Sarade: InLoveWithNature

I recently read 'Who will cry when you die?' book written by Robin Sharma - the author of the best seller 'The Monk who sold his Ferrari'. The book is a collection of 101 life lessons explained in a very short but succinct manner. Even if we practice only some of these lessons in our day to day life, it will certainly enrich the quality of our personal and professional life. Listing some of the lessons that I liked the most:-

- Start Your Day Well
- Talk to Yourself
- Remember, Genius Is 99 Percent Inspiration
- Get Up Early
- Laugh More
- Spend a Day Without Your Watch
- Take More Risks
- Live a Life
- Always Carry a Book with You
- Enjoy the Path, Not Just the Reward
- Get Good at Asking
- Connect with Nature
- Use Your Commute Time
- Get Serious About Setting Goals
- Walk in the Woods
- Listen to Music Daily
- Learn to Meditate
- Stop Complaining and Start Living
- See Your Day as Your Life
- Be Humble
- Don’t Finish Every Book You Start
- Sleep Less
- Learn How to Walk
- Plant a Tree
- Be an Adventurer
- Respect Your Instincts
- Love Your Work

Enjoy reading !

Uninitialized constant Win32 (NameError)-cucumber

over 1 year ago | Doel Sengupta: Doel

I confronted the error whenever I was trying to run, for my new rails 3.0 app in Windows 7
>> rake cucumber
The error looked like
>>uninitialized constant Win32 (NameError)

Solved by installing the following gem, adding the line in the gemfile

gem 'win32console'

Go to your app directory and execute  >> bundle

That's it !! I am able to run the cucmber now :-)

Uninitialized constant RbReadline::Encoding error while running rake for rails 3.0.0 with ruby 1.8.7 app

over 1 year ago | Doel Sengupta: Doel

Got the above error whenever I was executing rake for my new rails 3.0.0 app in Windows 7.

Comment out the following lines from the rbreadline.rb file under C:\Ruby187\lib\ruby\site_ruby\1.8

This is really a huge file, opening in Word and then adding line numbers in the document may help you in commenting line number 4404. Though it  may sound silly but I am adding the steps to add the line numbers  in word document too.

File -> Page Setup -> Layouts -> Click on line numbers --> continuous

Line no 4404

and the following one

if defined? ''.getbyte
      @encoding = "X"      # ruby 1.9.x or greater
      # @encoding_name = Encoding.default_external.to_s
   end

For details the following URLs are really helpful
http://trbhoang.blogspot.com/2010/05/issue-with-rspec-on-windows.html
http://tom.net.nz/2010/09/installing-diaspora-on-windows/

HTS Beijing office and 90 minutes Yoga

over 1 year ago | Jen Ji: Why do i do what i do?

Just to be sure all the money was going to a good cause, I stopped by the HTS Foundation Beijing office to meet the special needs coordinator, Crystal, who is also interested in running.

I loved the office and and it is light and airy. The staffers welcomed me and we chatted about what it’s like working for a charity and the work they do. I enjoyed the afternoon which ended with a 90 minute yoga session in the office.

Who knew contributing to a good cause to charity is good for the mind, body and soul! :)

Unable to Download gem with native extensions with Ruby 1.8.7 and Rails 3.0

over 1 year ago | Doel Sengupta: Doel

A couple of days back I have installed Ruby 1.8.7 for working with Rails3.0.0 To my surprise whenever I was executing the any of the gem installation commands with native extensions, it was failing. Then I found the following stuff after searching quite a bit.
Following URL gives the details or else you can look at the bullet-ed points below and execute them in order

1) Uninstall any DevKit previously installed in your system. Control Panel\All Control Panel Items\Programs and Features --> uninstall Devkit
2) Get the DevKit from the following url http://rubyinstaller.org/downloads/
3) Download the exe file to a local folder like D:/DevKit
4) Go inside the folder from the command prompt and execute the following commands
i) ruby dk.rb init --> this will create the config.yml file
ii) ruby dk.rb install
iii) devkitvars.bat  --->; This will add in the PATH variable
5) Install the gems
gem install devise --platform=ruby
gem install devise_rpx_connectable --platform=ruby
6) or you can add them in the Gemfile of your rails3 app and just execute
bundle

The above command will then install the gem with the native extensions. Remember to add the platform part.

Engineering practices !!

over 1 year ago | Yashashree Barve: Life is Beautiful !!

I would be speaking on one of my favourite topics "Engineering Practices" at Agile Tour 2010 in Pune India this Saturday i.e. 23rd Oct 2010. This is the first time Agile Tour conference is happening in India !
Am really excited to think about the event, and specially my presentation. Looking forward to hear new ideas, new thoughts to feed my mind.


The agenda looks exciting, They have 3 tracks, one technical, one process, and one on organizational change management.

So inviting all you folks in Pune and in Mumbai, who are passionate about Agile, to participate in this event, and wish me luck!

The Grassroots Myth

over 1 year ago | Michael Idinopulos: Transparent Office

Call me crazy, but I'm going to attack another another social software orthodoxy: the Grassroots Myth. The Grassroots Myth is my name for the notion that the most effective way to bring a new social software platform into an enterprise...

The right perspective

over 1 year ago | Niranjan Sarade: InLoveWithNature

I must thank my friend Sudhir Bangera for sending this very nice story to begin with my day of work. It's actually a food of thought for all ... Sharing the same.

Two brothers grew up in an orphanage. The warden of the institution was a pesky fellow, who would often say terrible things to the children.

Years passed. The little boys grew up to become fine young men, and in time got married and had families of their own.

The elder brother grew up to become bad tempered and gave his family lot of grief. The younger brother, however, turned out to be a good parent and husband. He was successful both in his professional and personal life. People who knew them would express surprise over how the two brothers were so different from each other, in spite of facing the same circumstances while growing up.

The elder brother would say, “The warden, whom we all looked upon as almost a father, set us a bad example. I had no one to guide me, so I couldn’t help but turn out the way he was. It’s not my fault, I have become like him because of my circumstances.”

And, the younger brother would say, “The warden never taught me good values or behavior. But growing up, I made a promise to myself, to hold him as an example of what not to be and to make sure that I don’t to do the things he did.”

How many times have we blamed our failures over bad circumstances or rotten luck? True success and happiness comes from making the best out of a bad situation and looking at things with the right perspective. Look at the brighter side of situations ...

Have a thoughtful day ahead ! :-)

Frameworks enabling XP Engineering Practices on Android Platform

over 1 year ago | Lalatendu Das: Interpretations of Technorealism

My recommended frameworks enabling engineering practices for android development:


  1. Test Driven development: Use android Test Instrumentation Framework (Android extension to JUnit framework)
  2. Automated Blackbox/Functional testing: Consider Robotium (Selenium for Android)
If you are interested, check these out (at your own risk)
  1. Automated Build: AndroidAnt
  2. (Alternate) Test Driven Development: Positron 
Hope this helps you in writing better Android Applications. 
Please feel free to drop a comment, if you come across any other framework enabling adoption of XP engineering practices on android development

Panoramic view of Naigara falls

over 1 year ago | Niranjan Sarade: InLoveWithNature

Sharing some beautiful snaps of Naigara falls that I have tried to capture in my small camera... Enjoy !











Mount Washington photos

over 1 year ago | Niranjan Sarade: InLoveWithNature

On October 2, 2010, my wife and I visited Mount Washington (New Hampshire) along with my friends. Mt. Washington is the highest peak in the Northeastern United States. (6288 ft). It was a wonderful experience that can not be expressed in the words. I have tried to capture the nature's beauty in my camera! Sharing some photos...









Product lifecycle in an agile enterprise

over 1 year ago | Lalatendu Das: Interpretations of Technorealism

Borrowing from Dean Leffingwell. 

ISO Consolidated Usability Model

over 1 year ago | Lalita Chandel: My View



Awesome tips on Usability

over 1 year ago | Lalita Chandel: My View

http://sixrevisions.com/usabilityaccessibility/10-usability-tips-based-on-research-studies/

Visual Design, Information Architecture, and Content in Usability

over 1 year ago | Lalita Chandel: My View

Following up on my earlier post on User experience, I learnt about three highly cohesive parameters of Usability. Concentrating on just one of these aspect does not assure success of the product and it is necessary to have all of them to work in harmony.

Lets take a hypothetical scenario with a customer Liz to understand it :-

Liz is browsing an e-commerce site to purchase a credit card wallet. Like any other customer, she has multiple questions in her mind and wants to be assured about
the product before making the transaction. Now with the information available on the site, let's see if she buys the wallet or leaves the site after being frustrated.

Liz is looking at the design pages on the site, but can find only the outer portion view of the wallet. She liked the outer design, but is not able to see the back of the product. She wants to make sure that it would also store small changes with a zippered pocket. But due to a limited visual view, she is not able to make this judgement. The next option, in this case could be to look at the product description, but the description is at the bottom of the page under many unrelated selling items and Liz might not scroll to the bottom of the page. Moreover the description section has many irrelevant facts, like how the wallet is constructed from durable leather and a silk blend and is perfect to store all of our daily essentials. Yet it doesn't answer a simple question of whether it can carry loose changes or not.

Next strategy that comes in Liz's mind is "Maybe, if there is a return policy, I'd buy it. Then, if I don't like it, I could return it". Not a bad approach !

But this would help,only if she could find the return policy in the site, which she couldn't. There was no link to it on the product page. That's when she tried searching. Typing "Return Policy" into the Search box produced the error message, stating no results found. Poking around on the site did uncover a link labeled "Help" which produced an unordered Frequently-Asked Questions list. However, apparently returning a credit card wallet is not something frequently asked, because there is no helpful information on that topic.

Liz is frustrated and leaves the site. The sale is lost.

So what did we observe here ?

There is a three-way failure to communicate what the shopper needed to make her purchase. It was a simultaneous failure of the site's visual design, the information architecture, and the content design.

When Liz couldn't easily see the design of the product and she didn't locate the product description, she encountered visual design issues. When she couldn't find the page with the return policy, she bumped into an information architecture issue. And the inadequate product description and unclear policy issues were the content design issues.

Fixing just one of these would not help as the real solution comes from the interplay of these three areas and it is worth giving a thought.

Combining two related fields in a url to prevent tampering

over 1 year ago | Alex Rothenberg: Common Sense Software

Usually when you select an item from a search results list you only need to pass the id in the url and that's enough to lookup the rest of the details when processing the response. Recently I had a case where I couldn't lookup the item from the id because it wasn't in my database. I'm going to describe how I passed several pieces of information in a single url and what I did to ensure users could not be manipulate them independently.

My application was searching and displaying a list of companies then keeping track of which one the user selects.



When someone clicks on a company name it would save the company's id and display a nice message "Thanks for selecting Google Inc." Since the companies came from a slow external service I didn't want to call again, I passed both the id and name in the url.

I built a couple of simple haml files to show my company list. Each row had a link to display the company name and passed both the name and id in the url.

# search_results.html.haml
%table
  %tr
    %th Company Name
    %th Location
  = render @companies


# _company.html.haml partial
%tr
  %td= link_to company.name, company_path(:id=>company.id, :name=>company.name)
  %td= company.location



The controller code was also pretty straightforward.

class CompaniesController
  def show
    company = Company.new(:id=>params[:id], :name => params[:name])
    current_user.update_selected_company = company
  end
end



This worked great and worked, but then we started looking at the urls in our browser and noticed they looked like http://my.site.com/companies/60902413&name=Google+Inc..

Hmm ... What would happen if someone changed the name in the url? We tried loading http://my.site.com/companies/60902413&name=Some+Silly+Name. Uh-oh, our database now stored the selected company Some Silly Name with id #60902413. This could be confusing or worse a security risk where a clever (or malicious) user could store inaccurate information in our database.

Our solution was to combine the two fields into a single query parameter that was resistant to user tampering and is passed as a single unit. Fortunately Rails passes the session back and forth in a cookie with just that requirement. The session is a hash of many different key-value pairs that need to be encoded as a single cookie, it also contains sensitive information that should be resistant to tampering (and unreadable) and, most importantly it turns out to be something we could reuse.

Starting from the outside in what we wanted to do was rewrite our _company.html.haml partial view to put the single encrypted form of the company on the url.

%tr
  %td= link_to company.name, company_path(:id=>company.to_encrypted_s)
  %td= company.location

and parse that in the controller

class CompaniesController
  def action
    company = Company.from_encrypted_s(params[:id])
    current_user.update_selected_company = company
  end
end



Ok, but what do those to_encrypted_s and from_encrypted_s methods do?

class Company
  def to_encrypted_s
    Encryption.new.encrypt(:company_name=>company_name, :duns=>duns)
  end

  def self.from_encrypted_s encrypted_data
    Company.new Encryption.new.decrypt(encrypted_data)
  end
end

I still haven't told you how they work, we're just working down from the outside-in figuring out what other classes we'll need. So what does the Encryption class look like?

class Encryption
  def initialize
    secret = (Rails.version > '3.0') ?
             Rails.application.config.cookie_secret : 
             ActionController::Base.session_options[:secret]
    @verifier = ActiveSupport::MessageVerifier.new(secret, 'SHA1')
  end

  def encrypt message
    @verifier.generate message
  end

  def decrypt encrypted
    @verifier.verify encrypted
  end
end



We make use of the ActiveSupport::MessageVerifier class which as the documentation says "makes it easy to generate and verify messages which are signed to prevent tampering".

Now when we select a company we get a url with a crazy long id like http://my.site.com/company/BAh7BzoJZHVuc2kDE%2BAUOhFjb21wYW55X25hbWUiMEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24%3D--9027b2c449c0b4a1aea375cb1722fa9db8e56066. If someone were to try and change the really long id in the url the application will throw an ActiveSupport::MessageVerifier::InvalidSignature exception instead of saving bad data.

We've given up readability in the url but in exchange we're guaranteed the id and name we get in the controller go with each other.

Combining two related fields in a url to prevent tampering

over 1 year ago | Alex Rothenberg: Common Sense Software

Usually when you select an item from a search results list you only need to pass the id in the url and that's enough to lookup the rest of the details when processing the response. Recently I had a case where I couldn't lookup the item from the id because it wasn't in my database. I'm going to describe how I passed several pieces of information in a single url and what I did to ensure users could not be manipulate them independently.

My application was searching and displaying a list of companies then keeping track of which one the user selects.



When someone clicks on a company name it would save the company's id and display a nice message "Thanks for selecting Google Inc." Since the companies came from a slow external service I didn't want to call again, I passed both the id and name in the url.

I built a couple of simple haml files to show my company list. Each row had a link to display the company name and passed both the name and id in the url.

# search_results.html.haml
%table
  %tr
    %th Company Name
    %th Location
  = render @companies


# _company.html.haml partial
%tr
  %td= link_to company.name, company_path(:id=>company.id, :name=>company.name)
  %td= company.location



The controller code was also pretty straightforward.

class CompaniesController
  def show
    company = Company.new(:id=>params[:id], :name => params[:name])
    current_user.update_selected_company = company
  end
end



This worked great and worked, but then we started looking at the urls in our browser and noticed they looked like http://my.site.com/companies/60902413&name=Google+Inc..

Hmm ... What would happen if someone changed the name in the url? We tried loading http://my.site.com/companies/60902413&name=Some+Silly+Name. Uh-oh, our database now stored the selected company Some Silly Name with id #60902413. This could be confusing or worse a security risk where a clever (or malicious) user could store inaccurate information in our database.

Our solution was to combine the two fields into a single query parameter that was resistant to user tampering and is passed as a single unit. Fortunately Rails passes the session back and forth in a cookie with just that requirement. The session is a hash of many different key-value pairs that need to be encoded as a single cookie, it also contains sensitive information that should be resistant to tampering (and unreadable) and, most importantly it turns out to be something we could reuse.

Starting from the outside in what we wanted to do was rewrite our _company.html.haml partial view to put the single encrypted form of the company on the url.

%tr
  %td= link_to company.name, company_path(:id=>company.to_encrypted_s)
  %td= company.location

and parse that in the controller

class CompaniesController
  def action
    company = Company.from_encrypted_s(params[:id])
    current_user.update_selected_company = company
  end
end



Ok, but what do those to_encrypted_s and from_encrypted_s methods do?

class Company
  def to_encrypted_s
    Encryption.new.encrypt(:company_name=>company_name, :duns=>duns)
  end

  def self.from_encrypted_s encrypted_data
    Company.new Encryption.new.decrypt(encrypted_data)
  end
end

I still haven't told you how they work, we're just working down from the outside-in figuring out what other classes we'll need. So what does the Encryption class look like?

class Encryption
  def initialize
    secret = (Rails.version > '3.0') ?
             Rails.application.config.cookie_secret : 
             ActionController::Base.session_options[:secret]
    @verifier = ActiveSupport::MessageVerifier.new(secret, 'SHA1')
  end

  def encrypt message
    @verifier.generate message
  end

  def decrypt encrypted
    @verifier.verify encrypted
  end
end



We make use of the ActiveSupport::MessageVerifier class which as the documentation says "makes it easy to generate and verify messages which are signed to prevent tampering".

Now when we select a company we get a url with a crazy long id like http://my.site.com/company/BAh7BzoJZHVuc2kDE%2BAUOhFjb21wYW55X25hbWUiMEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24%3D--9027b2c449c0b4a1aea375cb1722fa9db8e56066. If someone were to try and change the really long id in the url the application will throw an ActiveSupport::MessageVerifier::InvalidSignature exception instead of saving bad data.

We've given up readability in the url but in exchange we're guaranteed the id and name we get in the controller go with each other.

Part II - Design patterns for scheduling a batch job in an Android Application

over 1 year ago | Lalatendu Das: Interpretations of Technorealism

In my previous post we discussed usage of AlarmManager to schedule batch Jobs in Android Applications. In this post, we will dig dipper into design patterns specific to scheduled jobs executing resource intensive operations.

Any process having a Broadcast receiver object, is treated as foreground process and get's priority by Android Runtime. Consider a situation where you have a resource intensive process scheduled as a batch job. Let's say, the user has been playing a rich UI game (with significant frame changes/sec) when AlarmManager triggers your resource intensive job via the Broadcast Notification. Since BroadcastReceiver object gets priority in the order of execution, the user may experience slowness / lag in the application (i.e. the game in this case) running on the UI.

In order to circumvent this problem, it's recommended to design your batch job as a service within your application. Use AlarmManager to trigger the notification and let the BroadcastReciever start (or Bind to) the service to execute your job in the background. In this way, the user would not experience any impact on the application running on the UI. As with other components, don't forget to register the Service in the Manifest.

Sample code for registering a service in the AndroidManifest.xml







Refining further, one last scenario to be considered. What happens if your phone is already in a sleep-mode when the scheduled job gets triggered. Incidentally, you can set the 'type' parameter in the AlarmManager to wake-up the phone while Broadcast is being triggered. The Phone will automatically remain awake as long as the BroadcastReceiver is executing. However once the BroadcastReceiver object starts your service and completes it's scope, we run into the risk of the phone again going to sleep mode, there by stopping your (long running) background job abruptly.

To avoid such unpleasant situation, I recommend to obtain a Wake-Lock from PowerManager system service. Release the Wake-Lock after your background process completes successfully. This way you would ensure that your background process gets all due attention from the Android device.

Sample code for a service implementing a Wake-Lock
public class ScheduledPostService extends Service {

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
// initialize the scheduleTimer
Log.d(Const.TAG, "Scheduled Post Service created");
}

@Override
public void onStart(Intent intent, int startId) {

// get a PowerLock
// Retain the wake lock till this process completes

PowerManager pm = (PowerManager) getSystemService(getApplicationContext().POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "SMSPost Tag");

// Acquire lock
wl.acquire();

// perform your operation

// Release lock
wl.release();

}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(Const.TAG, "Scheduled Post Service destroyed");
}
}

Don't forget to update the Android Manifest, giving permission to the application for using the WakeLock


Hope this has been helpful. Please feel free to share your experiences.

Social Software Adoption: Why Good Companies do Bad Things

over 1 year ago | Michael Idinopulos: Transparent Office

Why do good companies do bad things to social software adoption? In my previous post, I listed 6 things that companies can do to stimulate adoption of enterpris e social software. This advice ain't exactly rocket science. Make it your...

What is User Experience ?

over 1 year ago | Lalita Chandel: My View

I have been reading a lot about usability and user experience. Just trying to develop user's perspective about different system's.

The success ratio of any system majorly depends on its usage and that would be high only if the users find it efficient, effective, easy to learn, engaging and error tolerant. These are actually called the 5 E's of Usability.

User experience is all about how does a user feels about a system, which could be a product, service, application or combination of any of these. As soon as user interaction starts with the system, an experience is developed based on the perception and response that results from the interaction. Other definitions of user experience mention that it includes all the users' emotions, beliefs, preferences, perceptions, physical and psychological responses, behaviors and
accomplishments that occur before, during and after use.

A greater user experience means increased site success and here are the benefits, that we get with it

User Effectiveness

* increased success rate and reduced users errors
* improved ease of use and learning
* increased user productivity and user satisfaction
* reduced support and training costs
* increased user trust in the system

Development Costs

* reduced development costs and time
* reduced maintenance costs

Revenue

* increased product sales, revenue and market share
* increased site traffic and transactions/purchases
* attract and retain more customers

So how do we get started ? How do we get beyond "user friendly" to the true goal of all usability work i.e. to improve the final product.

The first step here is to define the problem statement with a clear objective of what we want to achieve. To be able to do that, we need to perform some user analysis using methods like user interviews, site visits , usability tests etc. Focus should be to learn about who our users are, what are their tasks and goals in using the product.

Using the 5E's to understand users:


For each of the five dimensions of usability (the 5Es), we think about how it is reflected in requirements for each of the user groups. The 5Es are:

Effective: How completely and accurately the work or experience is completed or goals reached ?
Efficient: How quickly this work can be completed ?
Engaging: How well the interface draws the user into the interaction and how pleasant and satisfying it is to use ?
Error Tolerant: How well the product prevents errors and can help the user recover from mistakes that do occur ?
Easy to Learn: How well the product supports both the initial orientation and continued learning throughout the complete lifetime of use ?

In my next blog , I will be sharing more about the techniques of implementing usability in new and already existing sites....