Monday, October 10, 2016

Grails application: Create an common structure for domain class as artifact for common functionality when create new domain class

Create a groovy file under directory 'src/groovy/templates/artifacts' with name 'DomainClass.groovy" with following contents.

NB: Class name is significant here.

And then when you create an domain class, the new domain class structure will be as like this.


@artifact.package@

class @artifact.name@ {
    Long id
    String name
    String displayName
    String description

    Date created
    Date updated

    static constraints = {
        name(blank: false, minSize: 1, maxSize: 255)
        displayName(nullable: true, minSize: 1, maxSize: 255)
        description(nullable: true, maxSize: 500)
    }
}


And another example for your controller then groovy file name must be 'Controller.groovy' with following contents


@artifact.package@
import com.pkm.GeneralExceptionHandler
import com.pkm.services.DataReadService

class @artifact.name@ implements GeneralExceptionHandler {
    DataReadService dataReadService

    def index() {

    }
}


And when you create any Controller that would be look like as follows


package com.pkm

import com.pkm.GeneralExceptionHandler
import com.pkm.services.DataReadService

class PkmController implements GeneralExceptionHandler {
    DataReadService dataReadService

    def index() {

    }
}

Wednesday, October 5, 2016

Get all columns from all MySQL tables


SELECT * FROM information_schema.columns
WHERE table_schema = 'database_name'
ORDER BY table_name, ordinal_position

How to reset a particular form field using jQuery

Full code snippet

<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<form style="margin: 50px;">
    <div>
        <input type='text' value='Default value' class="check_overall_change" style='width:206px'/>
        <button type='button'>Reset</button>
    </div>

    <div>
        <input type='checkbox' name='checkbox' value='1' class="check_overall_change"/> #1
        <input type='checkbox' name='checkbox' value='2' checked class="check_overall_change"/> #2
        <input type='checkbox' name='checkbox' value='3' class="check_overall_change"/> #3
        <button type='button' style='margin-left:78px'>Reset</button>
    </div>

    <div>
        <select style='width:206px' class="check_overall_change">
            <option value='1'>1</option>
            <option value='2'>2</option>
            <option value='3' selected>3</option>
        </select>
        <button type='button'>Reset</button>
    </div>

    <div>
        <select multiple style='width:206px' class="check_overall_change">
            <option value='1'>1</option>
            <option value='2' selected>2</option>
            <option value='3'>3</option>
            <option value='4' selected>4</option>
        </select>
        <button type='button'>Reset</button>
    </div>
    <div class="log"></div>
</form>
</body>
<script type="text/javascript">
    var baseConfig = getOverallValue(), log = $(".log");

    $(".check_overall_change").on("change", function () {
        checkFormValueChanged();
    })

    $(".check_overall_change[type='text']").on("keyup", function () {
        checkFormValueChanged();
    })

    function checkFormValueChanged() {
        if(baseConfig != getOverallValue()) {
            log.html("<h3>Value changed</h3>");
        }
        else {
            log.html("<h3>Value not changed</h3>");
        }
    }

    function resetForm() {
        var thiz = $(this), input = thiz.closest("div").find(":input:not(button)");
        if(input.is("select")) {
            var values = [];
            var options = input.find("option");
            for(var index = 0; index < options.length; index++) {
                if(options[index].defaultSelected) {
                    values.push($(options[index]).val())
                }
            }
            input.val(values);
        }
        else if(input[0].type == 'checkbox') {
            for(var index = 0; index < input.length; index++) {
                if(input[index].defaultChecked) {
                    $(input[index]).prop("checked", "checked");
                }
                else {
                    $(input[index]).prop("checked", null);
                }
            }
        }
        else {
            input.val(input[0].defaultValue)
        }
        checkFormValueChanged();
    }

    function getOverallValue() {
        var values = "";
        $(".check_overall_change").each(function (index, element) {
            element = $(element);
            if(element[0].type == 'checkbox') {
                values += element.is(":checked") + "-";
            }
            else {
                values += element.val() + "-";
            }
        })
        return values;
    }

    $("button").bind("click", resetForm);
</script>

And finally jsFiddle link to test yourself

Click here to test yourself at jsFiddle

Monday, September 26, 2016

File Change Listener Implementation Using Java


package com.pritom.kumar;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

/**
 * Created by pritom on 25/09/2016.
 */
public class ChangeFileListener {
    public static void main(String[] args) throws Exception {
        startWatch("C:/tmp");
    }

    public static void startWatch(String location) {
        try {
            Path directory = Paths.get(location);
            println("Start listening directory: [" + location + "]");
            final WatchService watchService = directory.getFileSystem().newWatchService();
            directory.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

            while (true) {
                final WatchKey watchKey = watchService.take();
                handleWatchTriggered(location, watchKey);
                boolean valid = watchKey.reset();
                if (!valid) {
                    throw new Exception("Watcher failed for listen [" + location + "]");
                }
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static void handleWatchTriggered(String location, WatchKey watchKey) throws Exception {
        List<WatchEvent<?>> watchEventList = watchKey.pollEvents();
        for (WatchEvent watchEvent : watchEventList) {
            if (watchEvent.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
                println("Created: [" + watchEvent.context().toString() + "]");
                File fileCreated = new File(location + "/" + watchEvent.context().toString());
            }
            else if (watchEvent.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
                println("Deleted: [" + watchEvent.context().toString() + "]");
            }
            else if (watchEvent.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
                println("Modified: [" + watchEvent.context().toString() + "]");
            }
        }
    }

    public static void println(Object o) {
        System.out.println("" + o);
    }
}

Friday, September 23, 2016

MySQL list all foreign key and other constraint names


SELECT  TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, 
        REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME

FROM    INFORMATION_SCHEMA.KEY_COLUMN_USAGE

WHERE   REFERENCED_TABLE_SCHEMA = 'database_name'

Sunday, September 11, 2016

Python parse xml


import sys
import xml.etree.ElementTree as ET

class XmlParser:
    def fixAttrs(self, attrs, c):
        nattrs = {}
        for attr in attrs:
            nattrs[self.buildXmlnsKey(attr, c)] = attrs[attr]
        return nattrs

    def buildXmlnsKey(self, tagtxt, tcounter):
        done = False
        if not tagtxt.startswith("{"):
            return tagtxt
        #print 'Search for: ', tagtxt, ' in ', tcounter
        if self.nsmap.has_key(str(tcounter)):
            nslmap = self.nsmap[str(tcounter)]
            #print 'nslmap-->', nslmap
            for obj in nslmap:
                if done is False:
                    for key in obj.keys():
                        kstr = '{' + key + '}'
                        #print 'key--->', key, ', --->', kstr
                        if tagtxt.startswith(kstr) and done is False:
                            done = True
                            kval = obj[key]
                            #print 'need to replace to: ', kval
                            if len(kval):
                                tagtxt = tagtxt.replace(kstr, kval+':', 1)
                            else:
                                tagtxt = tagtxt.replace(kstr, '', 1)

        if done is False and tcounter > 0:
            tcounter = tcounter - 1
            return self.buildXmlnsKey(tagtxt, tcounter)
        return tagtxt
                        

    def xmlToDict(self, node, dictclass = None):
        if dictclass is None:
            dictclass = {}
        self.ncounter = self.ncounter + 1
        if len(node):        
            if node.attrib:
                #print node.attrib
                dictclass['<<attr>>'] = self.fixAttrs(node.attrib, self.ncounter);            
            for child in node:
                tagtxt = self.buildXmlnsKey(child.tag, self.ncounter)
                newItem = self.xmlToDict(child)
                #tagtxt = child.tag
                if dictclass.has_key(tagtxt):
                    if type(dictclass[tagtxt]) is type([]):
                        dictclass[tagtxt].append(newItem)
                    else:
                        oldItem = dictclass[tagtxt];
                        dictclass[tagtxt] = [];
                        dictclass[tagtxt].append(oldItem);
                        dictclass[tagtxt].append(newItem);
                else:
                    dictclass[tagtxt] = newItem
        else:
            if node.text is None:
                text = ''
            else:
                text = node.text.strip()

            
            if node.attrib:
                #print fixAttrs(node.attrib, ncounter)
                dictclass['<<attr>>'] = self.fixAttrs(node.attrib, self.ncounter)
                dictclass['<<value>>'] = text;
            else:
                dictclass = text;

        return dictclass

    def printDic(self, dic, pos = None):
        if pos is None:
            pos = 0
        for key in dic.keys():
            #print 'key--->', key
            if dic[key] is None:
                print self.getLenStr(pos), key, ''
            elif type(dic[key]) is type({}):
                npos = pos + 1
                print self.getLenStr(pos) + str(key), '{'
                self.printDic(dic[key], npos)
                print self.getLenStr(pos) + '}'
            elif type(dic[key]) is type([]):
                npos = pos + 1
                print self.getLenStr(pos) + str(key), '['
                self.printList(dic[key], npos)
                print self.getLenStr(pos) + ']'
            else:
                print self.getLenStr(pos) + str(key), ': ', dic[key]

    def printList(self, dic, pos = None):
        if pos is None:
            pos = 0
        lindex = -1
        for obj in dic:
            lindex = lindex + 1            
            if obj is not None:
                if type(obj) is type({}):
                    print self.getLenStr(pos) + str(lindex)+'. {'
                    npos = pos + 1
                    self.printDic(obj, npos)
                    print self.getLenStr(pos) + '}'
                elif type(obj) is type([]):
                    print self.getLenStr(pos) + str(lindex)+'. ['
                    npos = pos + 1
                    self.printList(obj, npos)
                    print self.getLenStr(pos) +']'
                else:
                    print self.getLenStr(pos), str(lindex)+'.', obj

    def getLenStr(self, pos):
        sstr = ''
        while pos > 0:
            sstr = sstr + '   '
            pos = pos - 1
        return sstr

    def __init__(self, fileLocation):
        self.location = fileLocation;

    def parse(self):
        tree = ET.parse(self.location)
        root = tree.getroot()
        self.nsmap = {}
        self.lcounter = 0

        for event, elem in ET.iterparse(self.location, events=('start', 'end', 'start-ns', 'end-ns')):
            if event == 'start-ns':
                #print 'start-ns', lcounter
                a, b = elem
                if b is not None and len(b):
                    #print "A-->", a, ", B-->" , b
                    scounter = self.lcounter + 0
                    if not self.nsmap.has_key(str(scounter)):
                        self.nsmap[str(scounter)] = []
                        self.nsmap[str(scounter)].append({'http://www.w3.org/XML/1998/namespace': 'xml'});
                    self.nsmap[str(scounter)].append({b: str(a)})
            elif event == 'start':
                #print 'start', lcounter
                if not self.nsmap.has_key(str(self.lcounter)) and self.nsmap.has_key(str(self.lcounter - 1)):
                    #print 'exist: ', nsmap[str(lcounter - 1)]
                    self.nsmap[str(self.lcounter)] = self.nsmap[str(self.lcounter - 1)];
                self.lcounter = self.lcounter + 1       

        self.ncounter = 0
        self.dic = self.xmlToDict(root)
        self.dic = {self.buildXmlnsKey(root.tag, 0): self.dic}
        return self.dic;

if __name__ == "__main__":
    xmlObj = XmlParser('xml7.xml');
    theXmlDictionary = xmlObj.parse()
    xmlObj.printDic(theXmlDictionary);

Suppose you have the xml as file:


<?xml version="1.0"?>
<lib:library
    xmlns:lib="http://eric.van-der-vlist.com/ns/library"
    xmlns:hr="http://eric.van-der-vlist.com/ns/person">
    <lib:book id="b0836217462" available="true">
        <lib:isbn>0836217462</lib:isbn>
        <lib:title xml:lang="en">Being a Dog Is a Full-Time Job</lib:title>
        <hr:author id="CMS">
            <hr:name>Charles M Schulz</hr:name>
            <hr:born>1922-11-26</hr:born>
            <hr:dead>2000-02-12</hr:dead>
        </hr:author>
        <lib:character id="PP">
            <hr:name>Peppermint Patty</hr:name>
            <hr:born>1966-08-22</hr:born>
            <lib:qualification>bold, brash and tomboyish</lib:qualification>
        </lib:character>
        <lib:character id="Snoopy">
            <hr:name>Snoopy</hr:name>
            <hr:born>1950-10-04</hr:born>
            <lib:qualification>extroverted beagle</lib:qualification>
        </lib:character>
        <lib:character id="Schroeder">
            <hr:name>Schroeder</hr:name>
            <hr:born>1951-05-30</hr:born>
            <lib:qualification>brought classical music to the Peanuts strip</lib:qualification>
        </lib:character>
        <lib:character id="Lucy">
            <hr:name>Lucy</hr:name>
            <hr:born>1952-03-03</hr:born>
            <lib:qualification>bossy, crabby and selfish</lib:qualification>
        </lib:character>
    </lib:book>
    <Purchase>
        <PurchaseId>AAAAA</PurchaseId>
        <PurchaseType>ONLINE</PurchaseType>
    </Purchase>
    <Purchase>
        <PurchaseId>BBBBB</PurchaseId>
        <PurchaseType>OFFLINE</PurchaseType>
    </Purchase>
    <Purchase paid='True'>
        <Purchase age='30'>
            <Purchase>HMM 1</Purchase>
            <Purchase>HMM 2</Purchase>
        </Purchase>
    </Purchase>
</lib:library>

Output would be like this:

lib:library {
   Purchase [
      0. {
         PurchaseId :  AAAAA
         PurchaseType :  ONLINE
      }
      1. {
         PurchaseId :  BBBBB
         PurchaseType :  OFFLINE
      }
      2. {
         <<attr>> {
            paid :  True
         }
         Purchase {
            <<attr>> {
               age :  30
            }
            Purchase [
                0. HMM 1
                1. HMM 2
            ]
         }
      }
   ]
   lib:book {
      hr:author {
         <<attr>> {
            id :  CMS
         }
         hr:name :  Charles M Schulz
         hr:born :  1922-11-26
         hr:dead :  2000-02-12
      }
      <<attr>> {
         available :  true
         id :  b0836217462
      }
      lib:title {
         <<attr>> {
            xml:lang :  en
         }
         <<value>> :  Being a Dog Is a Full-Time Job
      }
      lib:isbn :  0836217462
      lib:character [
         0. {
            <<attr>> {
               id :  PP
            }
            hr:name :  Peppermint Patty
            hr:born :  1966-08-22
            lib:qualification :  bold, brash and tomboyish
         }
         1. {
            <<attr>> {
               id :  Snoopy
            }
            hr:name :  Snoopy
            hr:born :  1950-10-04
            lib:qualification :  extroverted beagle
         }
         2. {
            <<attr>> {
               id :  Schroeder
            }
            hr:name :  Schroeder
            hr:born :  1951-05-30
            lib:qualification :  brought classical music to the Peanuts strip
         }
         3. {
            <<attr>> {
               id :  Lucy
            }
            hr:name :  Lucy
            hr:born :  1952-03-03
            lib:qualification :  bossy, crabby and selfish
         }
      ]
   }
}

Friday, September 9, 2016

An educational story according to workers & managers in an organization

āĻāĻ• āĻĻ⧇āĻļ⧇ āĻ›āĻŋāϞ⧋ āĻāĻ• āĻĒāĻŋāĻĒ⧜āĻžāĨ¤ āϏ⧇ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ ⧝āϟāĻžā§Ÿ āĻ…āĻĢāĻŋāϏ⧇ āĻĸ⧁āĻ•āϤ⧋āĨ¤ āϤāĻžāϰāĻĒāϰ āĻ•āĻžāϰ⧋ āϏāĻ™ā§āϗ⧇ āϏāĻŽā§Ÿ āύāĻˇā§āϟ āύāĻž āĻ•āϰ⧇ āϏāĻ™ā§āϗ⧇ āϏāĻ™ā§āϗ⧇ āĻ•āĻžāĻœā§‡ āĻŦāϏ⧇ āϝ⧇āϤāĨ¤
āϏ⧇ āϝ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻ•āĻžāϜ āĻ•āϰāϤ, āϤāĻžāϤ⧇ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āĻšāϤ⧋ āĻĒā§āϰāϚ⧁āϰ āĻāĻŦāĻ‚ āĻāϰ āĻĢāϞ⧇ āϏ⧇ āφāύāĻ¨ā§āĻĻ⧇āϰ āϏāĻ™ā§āϗ⧇āχ āĻœā§€āĻŦāύ āύāĻŋāĻ°ā§āĻŦāĻžāĻš āĻ•āϰāϤāĨ¤
āĻ“āχ āĻ…āĻĢāĻŋāϏ⧇āϰ āϏāĻŋāχāĻ“ āϏāĻŋāĻ‚āĻš āĻ…āĻŦāĻžāĻ• āĻšā§Ÿā§‡ āĻĻ⧇āĻ–āϤ, āĻāχ āĻĒāĻŋāρāĻĒ⧜āĻžāϟāĻŋ āϕ⧋āύ⧋ āϧāϰāύ⧇āϰ āϏ⧁āĻĒāĻžāϰāĻ­āĻŋāĻļāύ āĻ›āĻžā§œāĻžāχ āĻĒā§āϰāϚ⧁āϰ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āĨ¤ āϏāĻŋāĻ‚āĻš āĻ­āĻžāĻŦāϞ, āĻĒāĻŋāρāĻĒ⧜āĻžāϕ⧇ āϝāĻĻāĻŋ āĻ•āĻžāϰāĻ“ āϏ⧁āĻĒāĻžāϰāĻ­āĻŋāĻļāύ⧇ āĻĻ⧇āĻ“ā§ŸāĻž āĻšā§Ÿ, āϤāĻžāĻšāϞ⧇ āϏ⧇ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤
āĻ•ā§Ÿā§‡āĻ• āĻĻāĻŋāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āϏāĻŋāĻ‚āĻš āĻāĻ•āϟāĻŋ āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻžāϕ⧇ āĻĒāĻŋāρāĻĒ⧜āĻžāϰ āϏ⧁āĻĒāĻžāϰāĻ­āĻžāχāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋā§Ÿā§‹āĻ— āĻĻāĻŋāϞāĨ¤ āϏ⧁āĻĒāĻžāϰāĻ­āĻžāχāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāχ āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻžāϟāĻŋāϰ āĻ›āĻŋāϞ āĻĻā§€āĻ°ā§āϘāĻĻāĻŋāύ⧇āϰ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž, āφāϰ āϏ⧇ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāϤāĨ¤
āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻžāϟāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡āχ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϞ, āĻāχ āĻ…āĻĢāĻŋāϏ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻŸā§‡āύāĻĄā§‡āĻ¨ā§āϏ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤
āĻ•ā§Ÿā§‡āĻ• āĻĻāĻŋāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻžāϰ āĻŽāύ⧇ āĻšāϞ⧋, āϤāĻžāϰ āĻāĻ•āϜāύ āϏ⧇āĻ•ā§āϰ⧇āϟāĻžāϰāĻŋ āĻĻāϰāĻ•āĻžāϰ, āϝ⧇ āϤāĻžāϕ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϞāĻŋāĻ–āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤ â€Ļ āϏ⧇ āĻāĻ•āϟāĻž āĻŽāĻžāĻ•ā§œāϏāĻžāϕ⧇ āύāĻŋā§Ÿā§‹āĻ— āĻĻāĻŋāϞ āĻāχ āĻ•āĻžāĻœā§‡ āϝ⧇ āϏāĻŦ āĻĢā§‹āύāĻ•āϞ āĻŽāύāĻŋāϟāϰ āĻ•āϰāĻŦ⧇, āφāϰ āύāĻĨāĻŋāĻĒāĻ¤ā§āϰ āϰāĻžāĻ–āĻŦ⧇āĨ¤
āϏāĻŋāĻ‚āĻš āϖ⧁āĻŦ āφāύāĻ¨ā§āĻĻ āύāĻŋā§Ÿā§‡ āĻĻ⧇āĻ–āϞ āϝ⧇ āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻž āϤāĻžāϕ⧇ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ⧇āϰ āĻ•āĻžāĻœā§‡āϰ āĻšāĻŋāϏāĻžāĻŦ āĻĻāĻŋāĻšā§āϛ⧇ āφāϰ āϏ⧇āϗ⧁āϞ⧋ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰāϛ⧇ āĻ—ā§āϰāĻžāĻĢ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤ āĻĢāϞ⧇ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇āϰ āϧāĻžāϰāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϧāĻžāϰāĻŖāĻž āύ⧇āĻ“ā§ŸāĻž āϝāĻžāĻšā§āϛ⧇ āĻāĻŦāĻ‚ āϏāĻŋāĻ‚āĻš āϏ⧇āϗ⧁āϞ⧋ āĻŦā§‹āĻ°ā§āĻĄ āĻŽāĻŋāϟāĻŋāĻ‚ā§Ÿā§‡ ‘āĻĒā§āϰ⧇āĻœā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨â€™ āφāĻ•āĻžāϰ⧇ āĻĒ⧇āĻļ āĻ•āϰ⧇ āĻŦāĻžāĻšāĻŦāĻž āĻĒāĻžāĻšā§āϛ⧇āĨ¤
āĻ•āĻŋāϛ⧁āĻĻāĻŋāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āϤ⧇āϞāĻžāĻĒā§‹āĻ•āĻžāϰ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻ“ āϞ⧇āϜāĻžāϰ āĻĒā§āϰāĻŋāĻ¨ā§āϟāĻžāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϞ⧋ āĻāĻŦāĻ‚ āĻāϗ⧁āϞ⧋ āĻĻ⧇āĻ–āĻ­āĻžāϞ⧇āϰ āϜāĻ¨ā§āϝ āφāχāϟāĻŋ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻ—āĻ āύ āĻ•āϰāϞāĨ¤ āφāχāϟāĻŋ āĻŦāĻŋāĻļ⧇āώāĻœā§āĻž āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋā§Ÿā§‹āĻ— āĻĒ⧇āϞ āĻŽāĻžāĻ›āĻŋāĨ¤
āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻ°ā§āĻŽā§€ āĻĒāĻŋāρāĻĒ⧜āĻž, āϝ⧇ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻ…āĻĢāĻŋāϏ⧇ āĻāϏ⧇ āĻĒā§āϰāϚ⧁āϰ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻŽāύ⧇āϰ āϏ⧁āϖ⧇ āĻ—āĻžāύ āĻ—āĻžāχāϤ⧇ āĻ—āĻžāχāϤ⧇ āĻŦāĻžāϏāĻžā§Ÿ āĻĢāĻŋāϰāϤ, āϤāĻžāϕ⧇ āĻāĻ–āύ āĻĒā§āϰāϚ⧁āϰ āĻĒ⧇āĻĒāĻžāϰ āĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻ•āϰāϤ⧇ āĻšā§Ÿ, āϏāĻĒā§āϤāĻžāĻšā§‡āϰ āϚāĻžāϰ āĻĻāĻŋāύāχ āύāĻžāύāĻž āĻŽāĻŋāϟāĻŋāĻ‚ā§Ÿā§‡ āĻšāĻžāϜāĻŋāϰāĻž āĻĻāĻŋāϤ⧇ āĻšā§ŸāĨ¤
āύāĻŋāĻ¤ā§āϝāĻĻāĻŋāύ āĻāϏāĻŦ āĻāĻžāĻŽā§‡āϞāĻžāϰ āĻ•āĻžāϰāϪ⧇ āĻ•āĻžāĻœā§‡ āĻŦā§āϝāĻžāϘāĻžāϤ āϘāϟāĻžā§Ÿ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āĻ•āĻŽāϤ⧇ āϞāĻžāĻ—āϞ, āφāϰ āϏ⧇ āĻŦāĻŋāϰāĻ•ā§āϤ āĻšāϤ⧇ āϞāĻžāĻ—āϞāĨ¤
āϏāĻŋāĻ‚āĻš āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϞ, āĻĒāĻŋāρāĻĒ⧜āĻž āϝ⧇ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϏ⧇āϟāĻžāϕ⧇ āĻāĻ•āϟāĻž āφāϞāĻžāĻĻāĻž āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰ⧇ āϏ⧇āϟāĻžāϰ āĻāĻ•āϜāύ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻĒā§āϰāϧāĻžāύ āύāĻŋā§Ÿā§‹āĻ— āĻĻ⧇āĻ“ā§ŸāĻžāϰ āĻāϟāĻžāχ āωāĻĒāϝ⧁āĻ•ā§āϤ āϏāĻŽā§ŸāĨ¤
āϏāĻŋāĻ‚āĻš āĻāĻŋāρāĻāĻŋāĻĒā§‹āĻ•āĻžāϕ⧇ āĻ“āχ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻĒā§āϰāϧāĻžāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋā§Ÿā§‹āĻ— āĻĻāĻŋāϞāĨ¤ āĻāĻŋāρāĻāĻŋāĻĒā§‹āĻ•āĻž āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύ āĻāϏ⧇āχ āϤāĻžāϰ āϰ⧁āĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž āφāϰāĻžāĻŽāĻĻāĻžā§ŸāĻ• āĻ•āĻžāĻ°ā§āĻĒ⧇āϟ āĻ“ āĻšā§‡ā§ŸāĻžāϰ⧇āϰ āĻ…āĻ°ā§āĻĄāĻžāϰ āĻĻāĻŋāϞāĨ¤
āĻ•ā§Ÿā§‡āĻ• āĻĻāĻŋāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āĻ…āĻĢāĻŋāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŸā§āĻ°ā§āϝāĻžāĻŸā§‡āϜāĻŋāĻ• āĻĒā§āĻ˛ā§āϝāĻžāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻāĻŋāρāĻāĻŋ āĻĒā§‹āĻ•āĻžāϰ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻ“ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϏāĻšāĻ•āĻžāϰ⧀āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϞ⧋āĨ¤ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āύāϤ⧁āύ āϕ⧇āύāĻž āĻšāϞ⧇āĻ“ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϏāĻšāĻ•āĻžāϰ⧀ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻŋāρāĻāĻŋāĻĒā§‹āĻ•āĻž āύāĻŋā§Ÿā§‹āĻ— āĻĻāĻŋāϞ āϤāĻžāϰ āĻĒ⧁āϰ⧋āύ⧋ āĻ…āĻĢāĻŋāϏ⧇āϰ āĻāĻ•āϜāύāϕ⧇āĨ¤
āĻĒāĻŋāρāĻĒ⧜āĻž āϝ⧇āĻ–āĻžāύ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϏ⧇āĻ–āĻžāύ⧇ āφāϗ⧇ āĻ›āĻŋāϞ āϚāĻŽā§ŽāĻ•āĻžāϰ āĻāĻ•āϟāĻž āĻĒāϰāĻŋāĻŦ⧇āĻļāĨ¤ āĻāĻ–āύ āϏ⧇āĻ–āĻžāύ⧇ āϕ⧇āω āĻ•āĻĨāĻž āĻŦāϞ⧇ āύāĻž, āĻšāĻžāϏ⧇ āύāĻžāĨ¤ āϏāĻŦāĻžāχ āϖ⧁āĻŦ āĻŽāύāĻŽāϰāĻž āĻšā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤
āĻāĻŋāρāĻāĻŋāĻĒā§‹āĻ•āĻž āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āωāĻ¨ā§āύ⧟āύ⧇ āϏāĻŋāĻ‚āĻšāϕ⧇ āĻŦā§‹āĻāĻžāϞ, ‘āĻ…āĻĢāĻŋāϏ⧇ āĻ•āĻžāĻœā§‡āϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ’ āĻļā§€āĻ°ā§āώāĻ• āĻāĻ•āϟāĻž āĻ¸ā§āϟāĻžāĻĄāĻŋ āϖ⧁āĻŦ āϜāϰ⧁āϰāĻŋ āĻšā§Ÿā§‡ āĻĒā§œā§‡āϛ⧇āĨ¤
āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻ•āϰ⧇ āϏāĻŋāĻ‚āĻš āĻĻ⧇āĻ–āϤ⧇ āĻĒ⧇āϞ, āĻĒāĻŋāρāĻĒ⧜āĻžāϰ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āφāϗ⧇āϰ āϤ⧁āϞāύāĻžā§Ÿ āĻ…āύ⧇āĻ• āĻ•āĻŽā§‡ āϗ⧇āϛ⧇āĨ¤
āĻ•āĻžāĻœā§‡āχ āϏāĻŋāĻ‚āĻš āĻ•ā§Ÿā§‡āĻ• āĻĻāĻŋāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āĻ¸ā§āĻŦāύāĻžāĻŽāĻ–ā§āϝāĻžāϤ āĻ•āύāϏāĻžāϞāĻŸā§āϝāĻžāĻ¨ā§āϟ āĻĒ⧇āρāϚāĻžāϕ⧇ āĻ…āĻĄāĻŋāϟ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻāĻŦāĻ‚ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āĻŦāĻžā§œāĻžāύ⧋āϰ āωāĻĒāĻžā§Ÿ āĻŦāĻžāϤāϞ⧇ āĻĻ⧇āĻ“ā§ŸāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋā§Ÿā§‹āĻ— āĻĻāĻŋāϞāĨ¤
āĻĒ⧇āρāϚāĻž āϤāĻŋāύ āĻŽāĻžāϏ āĻĒāĻŋāρāĻĒ⧜āĻžāϰ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻŽāύāĻŋāϟāϰ āĻ•āϰāϞ, āϏāĻŦāĻžāϰ āϏāĻ™ā§āϗ⧇ āĻ“ā§ŸāĻžāύ āϟ⧁ āĻ“ā§ŸāĻžāύ āĻ•āĻĨāĻž āĻŦāϞāϞāĨ¤ āϤāĻžāϰāĻĒāϰ āĻŦ⧇āĻļ āĻŽā§‹āϟāĻžāϏ⧋āϟāĻž āĻāĻ•āϟāĻž āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĒ⧇āĻļ āĻ•āϰāϞ āϏāĻŋāĻ‚āĻšā§‡āϰ āĻ•āĻžāϛ⧇āĨ¤ āĻ“āχ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡āϰ āϏāĻžāϰāĻŽāĻ°ā§āĻŽ āĻšāϞ⧋, āĻāχ āĻ…āĻĢāĻŋāϏ⧇ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧇āϰ āϤ⧁āϞāύāĻžā§Ÿ āĻ•āĻ°ā§āĻŽā§€ āĻŦ⧇āĻļāĻŋāĨ¤ āĻ•āĻ°ā§āĻŽā§€ āĻ›āĻžāρāϟāĻžāχ āĻ•āϰāĻž āĻšā§‹āĻ•āĨ¤
āĻĒāϰ⧇āϰ āϏāĻĒā§āϤāĻžāĻšā§‡āχ āĻŦ⧇āĻļ āĻ•ā§Ÿā§‡āĻ•āϜāύ āĻ•āĻ°ā§āĻŽā§€ āĻ›āĻžāρāϟāĻžāχ āĻ•āϰāĻž āĻšāϞ⧋āĨ¤ āĻŦāϞ⧁āύ āϤ⧋, āϕ⧇ āϏāĻ°ā§āĻŦāĻĒā§āϰāĻĨāĻŽ āϚāĻžāĻ•āϰāĻŋ āĻšāĻžāϰāĻžāϞ?
āĻ“āχ āĻšāϤāĻ­āĻžāĻ—ā§āϝ āĻĒāĻŋāρāĻĒ⧜āĻžāĨ¤ āĻ•āĻžāϰāĻŖ, āĻĒ⧇āρāϚāĻžāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āϞ⧇āĻ–āĻž āĻ›āĻŋāϞ, ‘āĻāχ āĻ•āĻ°ā§āĻŽā§€āϰ āĻŽā§‹āϟāĻŋāϭ⧇āĻļāύ⧇āϰ āĻŦā§āϝāĻžāĻĒāĻ• āĻ…āĻ­āĻžāĻŦ āĻ°ā§Ÿā§‡āϛ⧇ āĻāĻŦāĻ‚ āϏāĻ°ā§āĻŦāĻĻāĻžāχ āύ⧇āϤāĻŋāĻŦāĻžāϚāĻ• āφāϚāϰāĻŖ āĻ•āϰāϛ⧇, āϝāĻž āĻ…āĻĢāĻŋāϏ⧇āϰ āĻ•āĻ°ā§āĻŽāĻĒāϰāĻŋāĻŦ⧇āĻļ āύāĻˇā§āϟ āĻ•āϰāϛ⧇āĨ¤
āĻāĻŦāĻžāϰ āĻ­āĻžāĻŦ⧁āύ āϤ⧋, āφāĻĒāύāĻžāϰ āĻĒāϜāĻŋāĻļāĻžāύāϟāĻž āϕ⧀ āφāĻĒāύāĻžāϰ āĻ…āĻ°ā§āĻ—āĻžāύāĻžāχāĻœā§‡āĻļāύ⧇?

( āϏāĻ‚āĻ—ā§ƒāĻšā§€āϤāσ āĻŦāĻŋāĻĻ⧇āĻļāĻŋ āĻ—āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻŦāϞāĻŽā§āĻŦāύ⧇ )