Archive for January, 2009

Democratic Company - everyone tells how their preformance should be evaluated.

Friday, January 23rd, 2009

We have these open sessions regularly in our company where everyone talks about why they chose TechJini, what they like here, what should be changed, we share company’s vision, goals and make everyone understand how they are part of it.
Today’s session was to decide ‘appraisal policy’ i.e. on what criteria company should judge performance. Following are the inputs and will form the basis of our policy.

  1. Initiative / pro-activeness - Do I wait for work to be assigned to me? Even after seeing/knowing about a bug do I wait for someone to raise it?
  2. Following deadlines Following deadlines in itself is not a sign of ‘good performance’ that’s what we are ’supposed’ to do anyways but its considered as good performance if you are given something completely new and you ‘learn and deliver’ or you have a completely untrained team or in any other special scenario.
  3. Commitment / ownership - Accepting the bottom line of any work you do. One of the examples given was if I go on a leave I will ensure that none of my project/customers/work is affected, I will do the needful (without someone telling me) to transfer knowledge and if some urgency happens I will be taking out time from my vacation to help the new/replacement team.
  4. Doing more than what was assigned - Have I worked on projects/tasks which were not part of my regular work? Do I also participate in other activities which do not fall in my job description?
  5. Customer Oriented - Do I always think of what is best for the customer? Do I keep in mind which feature, technology, code will help improve performance and will benefit customer in long run? Do I always point out issues before customer does? Do I get nervous and excited with the customer?
  6. Domain Understanding - At the end of the project do I completely understand the domain?
  7. Knowledge sharing - Am I contributing to company’s body of knowledge? Am I taking sessions or writing articles to share my learning? Am I being approached by team members to solve issues?
  8. Acquiring knowledge - Am I learning only enough to finish the task or at the end of project I am capable of becoming a tech lead for similar technologies?
  9. Homework / spoon-feeding - Am I always finishing my homework before asking for help? Do I ask questions the smart way? Do I need spoon-feeding?
  10. Then there are other good to have skills like general behavior with others, influencing/persuading skills, communication

We also had very interesting discussion on what we think is ‘hard work’.

What we like and dislike about TechJini - Joys and pains of working with TechJini (a start up or small company)

Tuesday, January 20th, 2009

Right from the heart, this is what we ‘jinies’ (I just invented that term :) ) have to say about life at TechJini.
So here is what we like and what we would like to change:

  1. Exposure - We get exposed to different kind of work, something we will get to do in 2 years in a big organization we get to do it in first few months only. - Nuwas
  2. Good Learning - With so many new projects and all with different technology there are new challenges and lot to learn almost every day. - Akshi
  3. More responsibility - Our work is not limited to what is assigned and just coding or testing or designing. We do almost everything and very early in our career. - Everyone
  4. Different technologies - Exposure to different technologies and very easy to shift/learn. We get all the help but are also encouraged and showed how to do quick self learning. This acts as a big confidence boost. - Vipindas
  5. Flexible timings - Flexible working hours in true sense. No enforcement of mandatory working hours, can work from home, if I work on holiday I am given a compensatory off or cash - Everyone
  6. Friendly environment - Very very friendly environment, there are no bosses (absolutely no hierarchy), feels like a small family, even policies are made after open discussions - Everyone
  7. Technical Challenges - We get to face more technical challenges which is making us better programmers. - Everyone
  8. Neelima - Very friendly and helpful person, someone we will not have anywhere else - Sapna
  9. No bureaucracy or politics - Cant be more democratic and fair then in TechJini - Everyone
  10. Open to do whatever I want - I get enough opportunity, time and space to do whatever I want other than my regular work. I was able to finish a certification (which company is happy to pay for) and I can interact with everyone in the company - Arun
  11. No bench - We have never seen anyone without work. There is absolutely no bench and so many product ideas to work on.
  12. My product - Only place where I am encouraged and given full opportunity to work on my own idea and the best part is I don’t have to work alone, everyone in the company will work on my idea.
  13. Formal corporate culture - Culture here is too relaxed, we are serious in what we do but we do not get to see a very formal corporate culture which also has lot to teach.
  14. Brand Name - All the benefits of working for a big brand name.
  15. Company conveyance - hmm…. :)
  16. 6 days a week - Sometimes it pinches that our friends are having fun but we work on Saturdays too. Even though we do not do regular work (extra learning or activities) but still.
  17. Good Office building - We need to move to an attractive address soon, guys are finding it difficult to call prospective in-laws ;)
  18. Website - NEED to change website.

Update:
- Website changed :)

Android tip #1 ContentProvider , Accessing local file system from WebView / showing image in webview using content://

Saturday, January 10th, 2009

ok, this was a tough one.
First be informed that this is something Google (Android people) are trying to prevent i.e. letting browser (WebView) have access to the local file system. In earlier releases of SDK you could access local files using ‘file://’ but it is stopped now. Then there was an option where you can provide a WebViewClient and implement shouldOverrideUrlLoading to make it work. This was also removed.
The way to make it work now is by implementing your own ContentProvider, there is lot of discussion and documentation on implementing ContentProvider but all that is completely redundant (not needed). The solution is very simple, create your own ContentProvider and only override


public android.os.ParcelFileDescriptor openFile(android.net.Uri uri, java.lang.String mode) throws java.io.FileNotFoundException

Rest of the code in ContentProvder is not needed for this problem.

Step 1:
Declare your Content Provider in AndroidManifest.xml


<provider android:name="MyDataContentProvider"  android:authorities="com.techjini" />

Step 2:
Create your ContentProvider and implement openFile
All you have to do is get real path from uri, open it and return the descriptor


URI uri = URI.create("file:///data/data/com.techjini/files/myImage.jpeg");
File file = new File(uri);
ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
return parcel;

Step 3:
(You need this step only if file is not already present on the device/sdcard)
Save your content to the file. Following is an example to store a Bitmap


FileOutputStream fos = openFileOutput("myImage.jpeg", Activity.MODE_WORLD_WRITEABLE);
imageView.getBitmap().compress(Bitmap.CompressFormat.JPEG, 100, fos);

fos.flush();
fos.close();

You can find out where your image is stored using


System.out.println(getFilesDir().getAbsolutePath());

Step 4:
Access the file in WebView


myWebView.loadUrl("content://com.techjini/myImage.jpeg");
//com.techjini is what you mentioned in 'android:authorities' in your AndroidManifest.xml

Looks simple :)