September 30, 2012

PHP - Create Vertical Text Image

Create vertical text image in PHP

Please visit Gist

cheers!!

September 20, 2012

PHP MVC Part - I

MVC:

Model
View
Controller

What is MVC?
MVC is a way of coding. how do we distribute functions/classes/files. 

What MVC is not ?
MVC is not any programming language, rather it is a framework/architecture/design schema.
MVC architecture, we can implement in PHP, JAVA, C# and also JavaScript

Analogy:
1. How do you keep things in your kitchen. ?
2. We can keep all tools and utilities scattered on one table - ( No Pattern )
3. We can keep tools categorized by use. i.e. knife,spoon in one box, Plates near sink   - ( some pattern )

Real world example:
1. We have to build Book Store
2. We need to add/remove books
3. Show users list of books
4. Registered user can see preview

Here, we have some logic, lets call them, business logic:
i.e. add/remove books:

Also, we have some-thing to show user
i.e. List of books

Also, we have one rule
i.e. Registered user can see preview


All classes/functions of business logic, we can call: MODEL
All classes/files which helps to render product list, we can call:VIEW
All classes/files/functions which helps to decide/implement rule, we can call: CONTROLLER


Technically:
Model: Encompasses business logic ( Mostly base classes )
View: Helps to present/render data ( Mostly template files + classes which helps to render )
Controller: Helps to decide some rule. like, which page to render, which page not to render

Prime Example of MVC architecture:
Zend
Magento - way to complex to understand

End of part one.

Cheers!!




September 14, 2012

PHP MVC Singleton pattern

What is Singleton pattern ?
- A simple design schema, in which, we instantiate object only once in a page life cycle.

Explanation with analogy.
- Lets say, you went to restaurant and ordered 3 types of Soup.
- Each Soup comes up with Bowl + Spoon
- Now, you have 3 spoons.
- Normal pattern : you use 3 spoons for each bowl
- problem in that: wastage of 3 spoons
-Singleton pattern: each time, you use: same spoon to drink soup.
- Thats it.

Real-time example:
- DB Object.
- We invoke DB object in page life cycle only once.
- Each time, we need to run query, we use same object.

Example with code:

class db{

publis static $_instance;

public static _getInstance(){
       // Lets check, do we have object already instantiated ?
        if(self::$_instance){
             // return already instantiated object
             return self::$_instance
        }
        else{
             // else instantiate and return object
             return self::$instance = new db();
        }
}

}


Seems so easy :)

cheers!!!

September 12, 2012

Javascript Closure

Good way in javascript to have dynamic content using closure

Lets say, we have to use the string:

" content has been posted 1 times"
" content has been posted 2 times"

we can use below code

var message = function(count){
return " content has been posted " + count + times ";
}
console.log(message(1));
console.log(message(2));

Cheers!!

September 11, 2012

jQuery $.ajax IE and Cross Domain

jQuery $.ajax fails in IE for cross-domain request, even-though we have allowed origin on server configuration.

Basically AJAX is an transport mechanism, with few rules. we can have our own transport too. Here is how we can override $.ajax transport and allow cross-domain AJAX request in IE.

Add below code at the end of page.

$.ajaxTransport("+*", function( options, originalOptions, jqXHR ) {
    if(jQuery.browser.msie && window.XDomainRequest) {
        var xdr;
        return {
            send: function( headers, completeCallback ) {
                // Use Microsoft XDR
                xdr = new XDomainRequest();
                xdr.open("get", options.url);
                xdr.onload = function() {
                    if(this.contentType.match(/\/xml/)){
                        var dom = new ActiveXObject("Microsoft.XMLDOM");
                        dom.async = false;
                        dom.loadXML(this.responseText);
                        completeCallback(200, "success", [dom]);
                    }else{
                        completeCallback(200, "success", [this.responseText]);
                    }
                };
                xdr.ontimeout = function(){
                    completeCallback(408, "error", ["The request timed out."]);
                };
                xdr.onerror = function(){
                    completeCallback(404, "error", ["The requested resource could not be found."]);
                };
                xdr.send();
          },
          abort: function() {
              if(xdr)xdr.abort();
          }
        };
      }
    });
 
 
Cheers!! 

June 09, 2012

Bugs in software

Most painful things about software application are Bugs:

That has created virtually more than Billion Dollar Industry. ( Literally... ). For example, QA, QTP, Selenium and lots more...

After working on few iterations of same product.. old adage is powerful.

It is better to prevent rather than cure.

Use-cases:
1. Our client had virtually no patience during first iteration of consumer internet product.
2. He would present a page of ebay and ask to replicate it ... ASAP.

3. Poor developer, under pressure of project manager, recession and client tries hard to code
    fast and works on SATISFIABLE deliverable. After seeing that...client says okay.

4. Next day, Client asks the same to replicate for other type of classified of same page.
5. Again, under pressure -- poor developer with sheer force of his job security
    copies the module and in one case, it was so intense that, developer may not care about
    changing variable names either.

....these are the points, where i think, system becomes less and less usable. we had then, another 2 iterations at the cost of time and nonetheless to mention $$$$$.

Get to the market fast would be a good thing to follow, but, that has to be modified like

Get to the market fast in usable form. 


Lessons Learned:
1. Avoid working for clients with blind deadlines and rigidity of output/delivery
2. Avoid off-topic discussions in order to stay focused and keep shipping

3. Preset all use-cases in order to avoid possible unknown bugs.
4. Listen carefully and grasp N+2 level of requirement.
     i.e. if client wants to put a button with some operation.. try to understand,
           what exactly he wants to accomplish.
5. Avoid bugs from start :) it is better to prevent than cure.


Cheers!!

 

June 08, 2012

Optimism amidst 'recessionary fears'

Nice point to learn in Donald R. Keough's : Top 10 commandments for business failure"

We move slowly, but progress is being made at even the most hidebound bastions of what some politely call "traditionalism"

Father Ted Hesburgh at Notre Dame calls it: " Reactionary Pigheadedness".

Like, 1900 or 1929 or 1998 or 2007, we slowly progress for sure...

Get past the past.

Nicely written..

June 07, 2012

Web scrapping using python and beautifulsoup

BeautifulSoup is nicely written utility in python to parse the web page using.

It follows css selector style. Thus developer who is used to jquery selectors will find it very easy to parse the HTML/XML tags.

Here is sample example to get all the links.

Python:
 
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
 
soup.find_all('a')
#returns all links as nested data-structure
 
soup.find(id="link3")
#return node whose id is link3   

very Awesome.

Cheers!

 

May 30, 2012

Agile Development

Learned a big lesson today being in software development.

 -- Delivery is more important than coding elegance.


Today, we had a interim release of quasi consumer product i am working on for USA based client.

We have had third ( yes, third ) rewrite of code base. and each time we missed the delivery targets by few weeks. But, now everything is on burner. 16 hours of coding streak in a day.

Biggest lessons learned:
1. Delivery is more important. That means, less time spent of decisions on coding elegance
2. Keeping things simple should given more priority.
3. Meetings are simply waste of time.

4. Get things done is better than perfect. we can come later and fix trivial things.
5. Keep Shipping is like life line.